AMQ的重新运作如何运作?它是否在重新兑换过程中完全占用了消费者?

时间:2012-04-01 07:30:08

标签: activemq

假设我们只有一个消费者,我们的重新发送政策将允许该消息在很长一段时间内重新传递。

我尝试过一种情况,我发送了两条消息(不同的类型),一个用于重新传送,另一个可以正常使用。

如果正常消息的传送晚于重新传送的消息,则该消息似乎将被阻止。 在重新传递的消息多次尝试达到最大重传时间之前,它不会被消耗。这将导致一种易于消费的消息必须等待很长时间才能被消费的情况。

我想知道AMQ重新启动是如何工作的。当在消费者中重新传递消息时,可以将另一消息发送给该消费者,直到当前消息被消耗或超时(到DLQ)。

有人可以帮忙吗?谢谢,

2 个答案:

答案 0 :(得分:8)

重新传递消息时,ActiveMQ的首要考虑是遵守队列中的消息排序。

给定两条消息A和B,它们会按照您的描述发送到具有已定义的重新传递策略的队列:如果客户端处理A失败,该消息将被放回队列,直到A消息才会消耗其他消息成功消费。

查看ActiveMQ Message Redelivery and DLQ Handling部分了解更多详情。


如果它回答了您的问题,请记得将此回复投票。

答案 1 :(得分:3)

对于这种情况,可以将ActiveConnectionFactory设置为onBlockingRedelivery。 在de ActiveMq Api documentation中查找详细信息: