Java ActiveMQ客户端重新交付深入理解

Java ActiveMQ客户端重新交付深入理解,java,jms,activemq,Java,Jms,Activemq,我有一个ActiveMQ,队列中有400条消息,重新交付延迟为5分钟(无经验退避),最大重新交付尝试次数为288次。这或多或少是,在最坏的情况下,消息可能会在队列中24小时。。。或者这是最初的服务设计者的想法,但我必须体验一种不同的行为,消息似乎更多地保存在队列中。 这项服务是对雄猫的战争 我的假设是: 通过缓存消息和相关信息在客户端完成重新交付 因此,所有重新交付逻辑细节都存储在客户机/消费者处 由于新版本的发布,当tomcat重新启动并且war被CI/CD进程取代时会发生什么? ...

我有一个ActiveMQ,队列中有400条消息,重新交付延迟为5分钟(无经验退避),最大重新交付尝试次数为288次。这或多或少是,在最坏的情况下,消息可能会在队列中24小时。。。或者这是最初的服务设计者的想法,但我必须体验一种不同的行为,消息似乎更多地保存在队列中。 这项服务是对雄猫的战争

我的假设是:

  • 通过缓存消息和相关信息在客户端完成重新交付
  • 因此,所有重新交付逻辑细节都存储在客户机/消费者处
由于新版本的发布,当tomcat重新启动并且war被CI/CD进程取代时会发生什么? ... 是24小时计数器复位吗?
... 是否有最大数量的跟踪邮件?

当传递成功时,使用者将发送一个ack,ActiveMQ(服务器)将减少邮件计数

如果失败,考虑到重新传递策略,队列(服务器)将负责记录重试尝试的次数,因此是的,如果重新启动队列,次数将重置。

肯定是的


所有的重新交付策略控制都是在客户端完成的(除非使用我听说过的代理插件),并且没有持久性,因此重新启动客户端将使所有这些计数器重置并重新启动。

。。。我不是在重新启动队列(代理),而是在重新启动客户端(消费者)。。。这就是重点。我已经确认,所有这些逻辑都在客户端(已知)处理,并且这些计数器没有持久状态,因此重新启动会使它们重置。顺便说一句,服务器不负责计算ActiveMQ架构中的重试尝试次数。它在使用者级别缓存的消息以及重试尝试都是在该级别完成的。除非你正在使用我听说过的插件。很有趣,谢谢你试用!因此,在多个使用者/订阅者的情况下,重试计数值仍然存储在使用者端?问题是消息被传递到使用者(在客户端)并缓存在那里。当然,在重试策略流完成之前,使用者不会发送ACK信号,但消息也不会发送给任何其他使用者。因此,本质上,是的;即使有多个消费者,计数器也存储在客户端