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 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图2.0 版本点聚合中Marker的位置无法实时更新,如何解决呢?
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题