gpt4 book ai didi

JMS/Active MQ - 代理与消费者重新交付

转载 作者:行者123 更新时间:2023-12-04 00:51:33 26 4
gpt4 key购买 nike

据我了解( http://activemq.apache.org/message-redelivery-and-dlq-handling.html )重新交付可以由消费者或经纪人完成。
不过我有一些问题:

消费者的重新交付如何在下面工作?消费者是否缓存来自代理的消息并在本地重新传递?如果消费者在中间终止会发生什么?这样的消息会丢失吗?我认为,只要消费者不承认该消息,就不应该如此。但是在这种情况下,消息在代理上仍然可用吗?

何时使用代理与消费者重新交付有任何指导方针吗?有什么建议吗?

最佳答案

消费者在本地缓存并重新发送消息到客户端,直到满足重新发送计数,然后自动确认消息为坏消息(posin ack)。消费者可以根据确认模式控制是否将其标记为重新交付。如果由于某种原因消费者不能或不想处理消息,它也可以将它踢回去,如果它关闭 session ,它将再次可供消费。

代理将保留该消息,直到收到消费者的确认。如果您的使用者设置为 AUTO_ACKNOWLEDGE,那么如果发生未处理的异常或使用者意外结束,您可能会丢失消息。

否则,如果您的消费者正在使用事务或 CLIENT_ACKNOWLEDGE,它将让您控制何时发生。

对于事务,如果消费者在提交之前下降,则下一个消费者或该消费者重新连接时都可以使用它。

我一直在 CLIENT_ACKNOWLEDGE 上使用事务,所以我不想肯定地说如果在消费者关闭之前没有调用 Session.recover() ,消息将会丢失。

从消费者的角度来看,这也称为重试逻辑。

关于代理与消费者重新传递:默认情况下,代理只会不断向消费者提供相同的消息,直到达到重新传递计数为止。如果您告诉代理在给定的时间后不要重新传递它,那么您的使用者就可以使用其他可以处理的消息。

何时执行此操作实际上取决于您的应用程序中发生的情况。也许需要将特定消息放入数据库,而该数据库目前不可用,您想继续处理去其他地方/有其他目的的消息?

关于JMS/Active MQ - 代理与消费者重新交付,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25569386/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com