JMS消息只有在被确认以后,才认为已经被成功地消费了。消息的成功消费一般包含三个阶段:异步
在事务性会话中,当一个事务被提交的时候,确认自动发生。
在非事务性会话中,消息什么时候被确认取决于建立会话时的应答模式(Acknowledge mode),该参数有如下三个可选值ide
JMS支持一下两种消息的提交模式:工具
可使用消息优先级来指示JMS provider首先提交紧急的消息。优先级分10个级别,从0(最低)到9(最高)。若是不指定优先级,默认级别是4。须要注意的是,JMS provider并不必定保证按照优先级的顺序提交消息。code
能够设置消息在必定时间后过时,默认是永不过时能够设置消息在必定时间后过时,默认是永不过时。队列
能够经过会话上的createTemporaryQueue 方法和createTemporaryTopic方法来建立临时目的地。它们的存在时间只限于建立它们的链接所保持的时间。
只有建立该临时目的地的链接上的消息消费者才可以从临时目的地中提取消息。
能够在producer一方,经过message.setJMSReplyTo(replyTo);
方法将其传递给consumer,用来进行消息响应。事务
首先消息生产者必须使用PERSISTENT提交消息。消费者能够经过会话上的createDurableSubscriber
方法来建立一个持久订阅,该方法的第一个参数必须是一个topic
。第二个参数是订阅名称Subscription Name
。
JMS provider会存储发布到持久订阅对应的topic
上的消息。若是最初建立持久订阅的客户或者任何其它客户,使用相同的链接工厂
和链接的客户ID
,相同的topic
和相同的订阅名称Subscription Name
,再次调用会话上的createDurableSubscriber
方法,那么该持久订阅就会被激活。JMS provider会向客户发送客户处于非激活状态时所发布的消息。
持久订阅在某个时刻只能有一个激活的订阅者。持久订阅在建立以后会一直保留,直到应用程序调用会话上的unsubscribe
方法。ip
JMS PTP(Point-to-Point)模型定义了客户端如何向队列发送消息,从队列接收消息,以及浏览队列中的消息。
PTP模型是基于队列的,生产者发消息到队列,消费者从队列接收消息,队列的存在使得消息的异步传输成为可能。和邮件系统中的邮箱同样,队列能够包含各类消息,JMS Provider 提供工具管理队列的建立、删除。io
JMS Pub/Sub 模型定义了如何向一个内容节点发布和订阅消息,这些节点被称做topic
,topic
能够被认为是消息的传输中介,发布者(publisher)
发布消息到topic
,订阅者(subscribe)
从topic
订阅消息。topic
使得消息订阅者
和消息发布者
保持互相独立,不须要接触便可保证消息的传送。List