1

我正在使用虚拟目的地在 ActiveMQ 5.15.13 中实现发布订阅模型。

我有一个虚拟主题VirtualTopic,并且绑定了两个队列。每个队列都有自己的重新传递策略。假设Queue 1在处理消息时出现异常,将重试消息 2 次,Queue 2并将重试消息 3 次。发布重试消息将被发送到死信队列。

我观察到,当一条消息发送到 时VirtualTopic,它会被传递到两个队列。我面临一个问题,如果两个队列的消费者都无法成功处理消息。发往的消息Queue 1在重试 2 次后被移动到死信队列。我的期望是,Queue 2在 3 次重试后,消息会被删除。但是该消息仅向消费者重试Queue 2了 2 次,然后Queue 2作为待处理消息被卡住。

我在 activemq 代理中没有进行任何特定配置,并且以编程方式应用了重新传递策略。有没有我缺少的配置?

4

1 回答 1

0

问题出在我对 queue2 的实现中,创建了一个新的工厂实例,并且未正确设置重新传递策略。默认重新传递策略(最大重新传递 = 6,有一些延迟)启动,导致重新传递消息的延迟。我正在使用 junit 测试用例测试行为,一旦测试用例完成,消费者就死了,但消息仍在等待重新传递。

于 2020-07-27T06:22:22.640 回答