假设我们只有一个消费者,我们的重新发送政策将允许该消息在很长一段时间内重新传递。
我尝试过一种情况,我发送了两条消息(不同的类型),一个用于重新传送,另一个可以正常使用。
如果正常消息的传送晚于重新传送的消息,则该消息似乎将被阻止。 在重新传递的消息多次尝试达到最大重传时间之前,它不会被消耗。这将导致一种易于消费的消息必须等待很长时间才能被消费的情况。
我想知道AMQ重新启动是如何工作的。当在消费者中重新传递消息时,可以将另一消息发送给该消费者,直到当前消息被消耗或超时(到DLQ)。
有人可以帮忙吗?谢谢,
答案 0 :(得分:8)
重新传递消息时,ActiveMQ的首要考虑是遵守队列中的消息排序。
给定两条消息A和B,它们会按照您的描述发送到具有已定义的重新传递策略的队列:如果客户端处理A失败,该消息将被放回队列,直到A消息才会消耗其他消息成功消费。
查看ActiveMQ Message Redelivery and DLQ Handling部分了解更多详情。
如果它回答了您的问题,请记得将此回复投票。
答案 1 :(得分:3)
对于这种情况,可以将ActiveConnectionFactory设置为onBlockingRedelivery。 在de ActiveMq Api documentation中查找详细信息: