ActiveMQ客户端重新投递深入理解
ActiveMQ client redelivery deep understanding
我有一个有 400 条消息排队的 ActiveMQ,重新传递延迟是 5 分钟(没有 Exp.backoff),最大重新传递尝试是 288。这或多或少,在最坏的情况下消息可能在队列中24 小时 ... 或者那是原始服务设计者的想法,但我必须体验不同的行为,并且消息似乎在队列中保留得更多。
该服务是 Tomcat 上的 WAR。
我的假设是这样的:
- 通过缓存消息和相关信息在客户端完成重新传递
- 所以所有重新传递逻辑细节都存储在 client/consumer
当 tomcat 重新启动并且 war 由于新版本被 CI/CD 进程替换时会发生什么?
... 是 24 小时计数器重置吗?
...是否有最大数量的跟踪消息?
消费者发送成功后会发送一个ack,ActiveMQ(服务器)会减少消息计数。
在失败的情况下,考虑到重新传送策略,队列(服务器)将负责对重试尝试进行计数,所以是的,如果您重新启动队列,计数将重置。
当然可以。
所有重新传递策略控制都是在客户端完成的(除非使用我听说过的代理插件)并且没有持久性,因此重新启动客户端将使所有这些计数器重置并重新开始。
我有一个有 400 条消息排队的 ActiveMQ,重新传递延迟是 5 分钟(没有 Exp.backoff),最大重新传递尝试是 288。这或多或少,在最坏的情况下消息可能在队列中24 小时 ... 或者那是原始服务设计者的想法,但我必须体验不同的行为,并且消息似乎在队列中保留得更多。 该服务是 Tomcat 上的 WAR。
我的假设是这样的:
- 通过缓存消息和相关信息在客户端完成重新传递
- 所以所有重新传递逻辑细节都存储在 client/consumer
当 tomcat 重新启动并且 war 由于新版本被 CI/CD 进程替换时会发生什么? ... 是 24 小时计数器重置吗? ...是否有最大数量的跟踪消息?
消费者发送成功后会发送一个ack,ActiveMQ(服务器)会减少消息计数。
在失败的情况下,考虑到重新传送策略,队列(服务器)将负责对重试尝试进行计数,所以是的,如果您重新启动队列,计数将重置。
当然可以。
所有重新传递策略控制都是在客户端完成的(除非使用我听说过的代理插件)并且没有持久性,因此重新启动客户端将使所有这些计数器重置并重新开始。