基本构件(组件)
- ConnectionFactory
创建Connection对象的工厂,针对两种不同的jms消息模型,分别有QueueConnectionFactory和TopicConnectionFactory两种。
可以通过JNDI来查找ConnectionFactory对象。 - Destination
Destination的意思是消息生产者的消息发送目标或者说消息消费者的消息来源。对于消息生产者来说,
它的Destination是某个队列(Queue)或某个主题(Topic);对于消息消费者来说,它的Destination也是某个队列或主题(即消息来源)。
所以,Destination实际上就是两种类型的对象:Queue、Topic可以通过JNDI来查找Destination。 - Connection
Connection表示在客户端和JMS系统之间建立的链接(对TCP/IP socket的包装)。Connection可以产生一个或多个Session。
跟ConnectionFactory一样,Connection也有两种类型:QueueConnection和TopicConnection。 - Session
Session是我们操作消息的接口。可以通过session创建生产者、消费者、消息等。Session提供了事务的功能。当我们需要使用session发送/接收多个消息时,
可以将这些发送/接收动作放到一个事务中。同样,也分QueueSession和TopicSession。 - 消息的生产者
消息生产者由Session创建,并用于将消息发送到Destination。同样,消息生产者分两种类型:QueueSender和TopicPublisher。
可以调用消息生产者的方法(send或publish方法)发送消息。 - 消息消费者
消息消费者由Session创建,用于接收被发送到Destination的消息。两种类型:QueueReceiver和TopicSubscriber。
可分别通过session的createReceiver(Queue)或createSubscriber(Topic)来创建。当然,也可以session的creatDurableSubscriber方法来创建持久化的订阅者。 - MessageListener
消息监听器。如果注册了消息监听器,一旦消息到达,将自动调用监听器的onMessage方法。EJB中的MDB(Message-Driven Bean)就是一种MessageListener。
各组件关系
连接工厂-->生成连接-->创建会话(创建生产者和消费者)
消息 消息
生产者---------------->目的地------------->消费者
1 --------(1)PTP(Queue)---------- 1
1 --------(2)pub/sub(Topic)------ n
如果你希望发送的每个消息都应该被成功处理的话,那么你需要P2P模式。
消费消息有两种方式:
- 同步消费:receive从目的地获取消息,阻塞直到数据到达
- 异步消费:注册消息监听器,定义数据到达时的动作
消息:
**消息头**:getter和setter
**消息属性**:除消息头以外的消息信息
**消息体**:JMS定义的消息类型:TextMessage、MapMessage、ByteMessage、StreamMessage、ObjectMessage
编程模式
消息产生者向JMS发送消息的步骤
- 创建连接使用的工厂类JMS ConnectionFactory
- 使用管理对象JMS ConnectionFactory建立连接Connection
- 使用连接Connection 建立会话Session
- 使用会话Session和管理对象Destination创建消息生产者MessageSender
- 使用消息生产者MessageSender发送消息
消息消费者从JMS接受消息的步骤
- 创建连接使用的工厂类JMS ConnectionFactory
- 使用管理对象JMS ConnectionFactory建立连接Connection
- 使用连接Connection 建立会话Session
- 使用会话Session和管理对象Destination创建消息消费者MessageReceiver
- 使用消息消费者MessageReceiver接受消息,需要用setMessageListener将MessageListener接口绑定到MessageReceiver
消息消费者必须实现了MessageListener接口,需要定义onMessage事件方法。