【发布时间】:2020-11-15 18:21:54
【问题描述】:
我正在使用虚拟目的地在 ActiveMQ 5.15.13 中实现发布订阅模型。
我有一个虚拟主题VirtualTopic,并且绑定了两个队列。每个队列都有自己的重新传递策略。假设Queue 1 将重试消息 2 次,以防在处理消息时出现异常,Queue 2 将重试消息 3 次。发布重试消息将被发送到死信队列。
我观察到,当消息被发送到VirtualTopic 时,它会被传递到两个队列。
我面临一个问题,如果两个队列的消费者都无法成功处理消息。发往Queue 1 的消息在重试 2 次后被移至死信队列。我的期望是Queue 2 中的消息将在 3 次重试后被删除。但是消息仅重试Queue 2 的消费者2 次,然后作为待处理消息卡在Queue 2。
我在 activemq 代理中没有进行任何特定配置,并且以编程方式应用了重新传递策略。有没有我遗漏的配置?
【问题讨论】:
-
您如何在您的
Queue 2消费者上配置redelivery policy?你可以添加代码吗?Queue 2consumer 和Queue 1consumer 是在同一个微服务上还是在不同的微服务上? -
感谢您的回复。两个队列都在同一个微服务中使用。问题出在我对 queue2 的实现中,创建了一个新的工厂实例,并且未正确设置重新交付策略。默认重新传递策略(最大重新传递 = 6,有一些延迟)启动,导致重新传递消息的延迟。我正在使用 junit 测试用例测试行为,一旦测试用例完成,消费者就死了,但消息仍在等待重新传递。
标签: activemq dead-letter virtual-topic