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。。嗯差不多了吧,但是这个插件我也没用过,抱歉

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

报告相同问题?

悬赏问题

  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容