floatwf 2017-10-22 08:15 采纳率: 0%
浏览 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 vue2中使用计算属性
  • ¥50 远程桌面打开Mastercam、没有许可证、物理机打开正常
  • ¥15 ubuntu安装gdal后java读取tif文件报错
  • ¥15 请问lammps怎么做两种金属连接的原子浓度分布图
  • ¥15 求jacquard数据集
  • ¥15 w10部分软件不能联网
  • ¥15 关于安装hbase的问题(操作系统-windows)
  • ¥15 novnc连接pve虚拟机报错安全协议不支持262
  • ¥15 设备精度0.03给多少公差能达到CPK1.33