0%

JMS

JMS

Java消息服务(JMS)定义了java中一组创建、发送、接收和读取消息的应用程序接口

消息系统是用来为各个应用程序提供可靠的异步通信服务。解耦合性,发送方的请求发送到消息系统,再由消息系统转发给接收方。

JMS支持两种消息类型PTP和Pub/Sub。

JMS编程模型

一个基本的JMS程序主要由6部分构成

  • 系统管理对象(连接构造器,目标对象) Administered Objects
  • 连接对象(Connection)
  • 会话对象(Session)
  • 消息生产者(Message Producer)
  • 消息消费者(Message Consumer)
  • 消息对象(Message)

系统连接对象

系统连接对象有两部分,连接构造器和目标对象。

连接构造器

连接构造器是客户端创建连接的对象,所有的连接构造器都是QueueConnectionFactory或TopicConnectionFactory接口的实例

目标对象

目标对象是一个对象,客户程序用它指明客户端产生消息的目的地和消费消息的源头。PTP中为队列(queue),pub/sub中为主题(topic)

连接对象

连接对象封装了与JMS消息服务器的虚拟连接。一个连接对象包含了在客户端和服务端一个后台程序之间的打开的TCP/IP连接。

获取到QueueConnectionFactory或TopicConnectionFactory之后,使用createConnection来创建连接

1
connectionFactory.createConnection()

会话对象

会话对象是单线程上下文,可以用来创建消息生产者、消息消费者和消息。

获取到Connection之后使用createQueueSession或createTopicSession来创建

1
2
3
// 第一个参数为是否支持事务处理,第二个参数表示是否自动确认消息
connection.createQueueSession(false,Session.AUTO_ACKNOWLEDGE);
connection.createTopicSession(false,Session.AUTO_ACKNOWLEDGE)

消息生产者

消息生产者有会话对象创建,并发送消息到目标对象(queue或topic),需要实现MessageProducer接口

消息消费者

消息消费者由会话对象创建,用来接收发送到目标对象的消息,需要实现MessageConsumer接口

消息监听者

消息监听者是异步消息事件的处理者,实现了MessageListener接口,该接口只有一个方法onMessage

消息

消息主要由消息头,属性,消息体组成

PTP

PTP是点对点传输消息,建立在消息队列的基础上。每个客户端对应一个消息队列,客户端发送消息到对方的消息队列中,从自己的消息队列读取消息。

Pub/Sub

Pub/Sub将消息定位到某个层次结构栏目的节点上。必须保证某个节点的所有发布者(Publisher)发布的信息准确无误地发送大这个节点的所有消息订阅者(Subscriber)