一、JMS规范
1、连接工厂:客户用来创建连接对象。
2、连接:虚拟连接客户与JMS提供者。
3、会话:生产和消费信息的一个单线程上下文,用于创建product、consume、message。
4、目的地:客户用来指定它生产的消息的目标和它消费的消息的来源的对象
点对点(PTP)消息传递域的特点: 目的地——>queue
每个消息只能有一个消费者;
无论消费者在生产者发送消息的时候是否处于运行状态,它都可以提取消息。
发布/订阅消息传递域的特点: 目的地——>topic
每个消息有多个消费者;
订阅一个主题的消费者只能消费自它订阅之后发布的消息,持久订阅允许消费者消费它在未处于激活状态时发送的消息。
5、消息生产者
6、消息消费者:
同步消费:调用receive方法从目的地中显式提取消息,receive方法可以一直阻塞到消息到达
异步消费:注册消息监听器,以定义在消息到达时所采取的动作
7、消息:消息头、消息属性、消息体(TextMessage、MapMessage、BytesMessage、StreamMessage、ObjectMessage)。
二、JMS的可靠性机制
1、成功消费:客户接收消息、客户处理消息、消息被确认 。
消息何时被确认取决于创建会话是的应答模式(acknowledgement mode):
Session.AUTO_ACKNOWLEDGE:从receive或者MessageListener.onMessage返回时就自动确认客户收到的消息
Session.CLIENT_ACKNOWLEDGE:确认一个被消费的消息将自动确认所有已被消费的消息
Session.DUPS_ACKNOWLEDGE:会话迟钝的确认消息的提交
2、持久性
PERSISTENT:指示JMS provider持久保存消息,以保证消息不会因为JMS provider的失败而丢失。
NON_PERSISTENT:不要求JMS provider持久保存消息。
3、优先级:0(最低)——9(最高),默认是4。
4、消息默认永不过期,可以设置消息在一段时间后过期。
5、创建临时目的地:createTemporaryQueue()、createTemporaryTopic()。
6、持久订阅:
生产者先用PERSISTENT提交消息,客户通过createDurableSubscriber(topic,订阅名称)创建持久订阅;
一段时间后再次调用createDurableSubscriber方法,会激活该持久订阅,JMS provider会向客户发送客户处于非激活状态时所发布的消息;
持久订阅会一直保留直到调用会话上的unsubscribe方法。
7、本地事务
在一个JMS客户端,可以使用本地事务来组合消息的发送和接收。JMS Session接口提供了commit和rollback方法,事务性的会话总是牵涉到事务处理中,commit或rollback方法一旦被调用,一个事务就结束了,而另一个事务被开始。消息的生产和消费不能包含在同一个事务中。
三、消息传递域的相应接口
JMS公共 | 点对点域 | 发布/订阅域 |
ConnectionFactory | QueueConnectionFactory | TopicConnectionFactory |
Connection |
QueueConnection |
TopicConnection |
Destination |
Queue |
Topic |
Session |
QueueSession |
TopicSession |
MessageProducer |
QueueSender |
TopicPublisher |
MessageConsumer |
QueueReceiver |
TopicSubscriber |