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



据我所知(http://activemq.apache.org/message-redelivery-and-dlq-handling.html)还车可以由消费者或经纪人完成。不过我有一些问题:

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

何时使用经纪人与消费者的再交付有任何指导方针吗?有什么建议吗?

使用者会缓存消息并在本地将其重新传递给客户端,直到满足重新传递计数,然后自动将消息确认为坏消息(posin-ack)。消费者可以根据确认模式控制是否将其标记为重新交付。如果消费者出于任何原因不能或不想处理消息,它也可以将其踢回,如果关闭会话,它将可以再次使用。

代理将保留该消息,直到它从消费者那里得到ack为止。如果您的使用者设置为AUTO_ACKNOWLEDGE,则如果发生未处理的异常或使用者意外结束,则可能会丢失消息。

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

对于事务,如果消费者在提交之前退出,那么它将可用于下一个消费者,或者每当该消费者重新连接时。

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

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

关于经纪人与消费者的重新交付:默认情况下,经纪人只是不断向消费者发送相同的消息,直到达到重新交付计数。如果你告诉经纪人在给定的时间后不要重新传递它,那么你的消费者可以使用其他可以处理的消息。

何时执行此操作实际上取决于应用程序中的情况。也许某个特定的消息需要放入数据库,而该数据库目前不可用,您想转到其他地方/有其他用途的消息?

最新更新