打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
JMS消息的确认模式

创建session时,确认模式会在AMQ上设置

tSession=tConnect.createXXXTopicSession(false,Session.AUTO_ACNOWLEDGE)

tSession=tConnect.createXXXTopicSession(false,Session.DUPS_OK_AUTO_ACNOWLEDGE)

tSession=tConnect.createXXXTopicSession(false,Session.CLIENT_AUTO_ACNOWLEDGE)

下面分别介绍三种确认模式:

1.      AUTO_ACNOWLEDGE

   这种模式可以从三种角度来看,我们知道JMS消息传送的结构分为生产者(P)、服务器(s)和消费者(c

对于P来说无论是主题的publish方法还是队列的send方法执行了之后线程就会阻塞等待下一条确认消息,如果确认消息成功返回就说明执行成功,否者抛出异常。

对于S来说分两种情况:

S-àP 服务器对生产者的确认消息根据消息类型和订阅者的方式不同而不同:

☆对于持久消息,首先S将消息存入持久存储器然后给P发送确认消息,持久消息将等待有消费者来将其消费,非持久消息存在内存中,S直接将确认消息返回,队列上的消息将在消息生存期到达之后自动消失。

☆持久订阅消费者如果存在的话并且没有建立连接,则S也会将消息存入持久存储器在持久订阅者下次连接取得消息并返回确认时自动从持久存储器中消除。

C-àS 消费者接到消息之后向S返回确认消息,使S对消息进行处理(从内存或存储器删除)如果在传送确认消息的过程中出现故障则服务器就会再次传送,这种情况违背了“一次而且仅仅一次”的要求,再次传送时消息的redelivered属性标记为trueC可以根据消息的getJMSRedelivered方法来判断要不要接收该消息。再次传送肯定要比完全丢失要好。

2.      DUPS_OK_ACNOWLEDGE

  可以将一条消息向同一个目的地发送两次以上消息,传说比AUTO_ACNOWLEDGE再次发送的效率要高,性能好,其实不一定。

3.      CLIENT_ ACNOWLEDGE

AUTO_ACNOWLEDGE确认消息是在onMessage()之后发生而使用MessageCLIENT_ ACNOWLEDGE 特有的acknowledge()方法可以在onMessage()的任何地方返回确认,控制何时发送确认也可以一次发送多个消息的确认,称为“编组多条消息”。

 

 

备注:这三种消息确认模式在我的那本Java消息服务书上都有(P127)想看的可以找我借,有些地方可能解释的也不一定对仅供参考。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
JMS编程模式
JMS简介与ActiveMQ实战
深入掌握JMS(一):JSM基础
创建JMS Session对象的方法详解
ActiveMQ使用经验
理解面向消息中间件及JMS 以及 ActiveMQ例子
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服