消息接收确认
JMS消息只有被确认后,才会被认为消费,消息包含3个阶段,客户接受消息,客户处理消息,和消息被确认
事务性回话中,当一个事务被提交的时候,确认自动发生,
在非事务中,消息何时被确认取决于创建会话时的应答模式(acknowledgement mode),该参数有2个可选值
Session.AUTO_ACKNOWLEDGE:当客户成功从receive方法返回,从MessageListener.onMessage方法成功返回的时候,回话自动确认
Session.CLIENT_ACKNOWLEDGE:客户端通过调用消息的ackknowledge方法确认,这种确认在会话层上确认,确认一个被消费的消息,将自动确认所有被消费的消息,例如:如果一个消息消费者消费了10个消息,然后确认了第7个,那么这10个消息都被确认
Session.DUPS_ACKNOWLEDGE:该选择只是绘画迟钝的确认消息,如果消息provider失败,那么可能会导致一些重复的消息,如果是重复的消息,那么jms provider必须把消息头的JMSRedelivered字段设置为true
消息的持久性
支持2中模式
PERSISTENT:指示JMS provider持久保存消息,以保证消息不会因为JMS provider的失败而丢失
NON_PERSISTENT:不要求JMS provider持久保存消息
消息优先级
默认10级,从0(最低)到9(最高),不指定优先级,默认4级
消息过期
可以设置消息在一定时间后过期,默认永不过期
消息的临时目的地
可以通过会话上的createTemporaryQueue的方法和createTemporaryTopic方法来创建临时目的地,他们的存在事件只限于创建他们的连接所保持的时间,只有创建该临时目的地的连接上的消息消费者才能够从临时目的地中提取消息
持久订阅
该消息生产者必须试用工PERSISTENT提交消息,客户可以通过会话上createDurableSubscriber方法来创建一个持久订阅,该方法的第一个参数必须是topic,第二个参数是订阅的名称
JMS provider会储存发布到持久订阅对应的topic,如果最次创建持久订阅的客户或者任何其他客户,使用相同的连接工程和连接的客户端ID,相同的topic和相同的订阅名,在此调用会话上的createDurableSubscriber方法,那么该持久订阅会被激活,JMS provider会喜爱那个客户发送客户出浴非激活状态时所发布的消息
持久订阅在某个事件只能有一个激活的订阅者,该订阅创建后会一直保留,直到应用会话上调用了unsubscribe方法
本地事务
一个JMS客户端,可以使用本地事务来组合消息的发送和接受,JMS的session接口提供了comm和rellback方法,commit意味着生产的所有消息被发送,消费的所有消息被确认,rollback意味着生产的所有消息被销毁,消费的所有消息被回复并重新提交,
注意:如果使用请求/回复机制,如果开启事务中等待接收方的回复,那么程序会被挂起,直到事务提交,发送操作才会真正执行