floatwf 2017-10-22 08:15 采纳率: 100%
浏览 14828
已采纳

activeMQ异步,订阅模式,如何解决消息丢失和重发

我们现在在做一个商城项目;使用activeMQ完成系统之间的信息同步,实用异步发
送,发布订阅模式,因为异步,所以使用的事listener监听,这样如果我配置消息
持久化,问题如下:
1. consumer返回给broker的ackknowldge是在onmessage方法后,所以不
会存在消息丢失,对吗?
2. 如果consumer在接收到消息但是未给broker应答,consumer宕机了,默认重发
数是6次,如果我consumer一直宕机,broker会在发送第一条发现连接不上的时候停止发送,还是一直发完6次?最后消息又会怎样?
3. 我的消息都比较重要,不允许丢失,要怎么处理?
各位大哥,我已经看各种博文两天两夜了,实在理解总结不了,请帮忙解惑,不要丢给我一堆连接叫我看,谢谢!

  • 写回答

1条回答 默认 最新

  • 冰镇绿豆浆 2017-10-23 09:06
    关注

    1、返回的ackknowldge 取决于服务器session的设置。默认是Session.AUTO_ACKNOWLEDGE,客户端recevie()后者onMessage之后签收,还有Session.CLIENT_ACKNOWLEDGE ,客户端主动调用acknowledge 方法签收消息,第三种是Session.DUPS_OK_ACKNOWLEDGE 此选项指示 Session 不必确保对传送消息的签收.
    2、因为设置是持久化,会发完6次,如果服务器并收到ackknowldge,则停止发送,并保存在存储区,当有新的consumer连接上时重新发送这条消息。
    3、这个情况比较多,理论来说使用topic 加持久化可保证服务器消息可靠,客户端使用Producer.DeliveryMode = MsgDeliveryMode.Persistent,来保证客户端消息持久化。但是不能避免重复消息的问题,据说这个插件可以解决http://camel.apache.org/idempotent-consumer.html。。嗯差不多了吧,但是这个插件我也没用过,抱歉

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办