java消息服务学习笔记-1

来源:互联网 发布:网络团队介绍页面源码 编辑:程序博客网 时间:2024/05/16 16:03

本文是自己在看java消息服务这本书时的一个笔记。

java消息服务即是JMS。何为JMS?JMS是javaEE13种技术规范中的一种。javaEE规范有:JDBC、JNDI、EJB、RMI、XML、JavaMail、Java Servlet、Jave IDL/CORBA、JAF、JMS、JSP、JTA、JTS。

JMS是SUN公司制定的,包名都是以javax.jms开头的一组API,它是消息传送客户端和消息传送系统通信时所需接口和类的一种抽象,具体的消息传送系统由具体的厂商根据协议去实现。市面上比较常用的mq,如ActivceMq就实现了JMS协议。想了解activemq是如何实现jms的相关规范的,可以读activemq的源码。这篇文章主要是学习JMS规范的一个笔记,不涉及具体实现。

首先介绍下JMS的API。JMS支持两种消息传送模型:点对点模型(p2p模型)和发布/订阅模型(pub/sub模型)。关于这两种模型后面再做详细介绍。因为有两种消息传送模型,所以,JMS API分为了3个部分,公共API、点对点API、发布/订阅API。如下表格:

公共API

点对点API

发布/订阅API

ConnectionFactory

QueueConnectionFactory

TopicConnectionFactory

Destination

Queue

Topic

Connection

QueueConnection

TopicConnection

Session

QueueSession

TopicSession

Message

Message

Message

MessageProducer

QueueSender

TopicPublisher

MessageConsumer

QueueReceiver

TopicSubscriber


这三种当中,每一行中的类,作用都是一样的,只不过在不同的模式下,类名称不一样。下面介绍每一个api的作用,以公共api为例来讲,其他两类api都和公共的作用一样。

ConnectionFactory:用来创建消息客户端和消息服务提供者之间的连接。这个对象是由消息服务提供者管理的一个对象,消息服务提供者管理了两个对象,还有一个是Destination对象。

Destination:消息目的地,也是消息服务提供者管理的对象。

Connection:连接,由ConnectionFactory.createConnection()方法获得。

Session:会话,由connection.createSession(boolean,)

Message:要传送的消息对象,由session对象创建

MessageProducer:消息生产者,由session创建

MessageConsumer:消息消费者,由session创建


这些接口中,ConnectionFactory和Destination必须使用JNDI从消息提供者(JMS规范实现厂商,如activeMq)处获得,其他的对象都是通过这两个接口创建出来的。

主要API说完之后,回过头说下点对点和发布/订阅两种传送模式。

点对点模型中的三个概念:发送者(sender):生产消息的客户端称为发送者,接受者(receiver):消费消息的客户端称为接受者,队列:发送者和接受者通过队列来交互数据。

点对点模型的特点:1.发送到队列的消息只会由一个消费者接收消费,即使有多个接收者在监听这个消息也是只会有一个接收者来消费这条消息;2.可以同步或异步发送、接收消息;3.接收者通过拉取(pull)或轮询(polliing)主动向队列获取消息,而不是队列主动向接收者推送消息;4:点对点比发布/订阅耦合性强,因为发送者通常会知道消费者如何使用消息;5:支持负载均衡;6:队列有一个浏览器,可供客户端查看队列中的消息,而发布/订阅模式没有。队列浏览器是队列在某个时刻的一个快照,在浏览消息的过程中,实际的队列中消息有可能新增或者被消费,造成实际队列中的消息和快照的数据不一致。

发布/订阅模型中的三个概念:发布者(publisher):消息生产方;订阅者(subscriber);主题(topic):消息目的地,跟点对点中的队列作用一样。

发布/订阅模型的特点:1:一个发布者发布一条消息A到主题,订阅这个主题的所有订阅者都会收到消息A进行消费;2:主题会将消息主动推送(push)给订阅者;3:去耦能力比点对点强,发布者不需要关心订阅者的存在;4:订阅者分为持久订阅者和非持久订阅者。非持久订阅者收不到不活动期间发布的消息。


本篇完,后面会详细介绍消息的结构,继续点对点和发布/订阅


原创粉丝点击