【问题标题】:ActiveMQ - A message sent to multiple queues is getting stuck in queues if exception occurs in any queueActiveMQ - 如果任何队列中发生异常,则发送到多个队列的消息会卡在队列中
【发布时间】: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 2 consumer 和 Queue 1 consumer 是在同一个微服务上还是在不同的微服务上?
  • 感谢您的回复。两个队列都在同一个微服务中使用。问题出在我对 queue2 的实现中,创建了一个新的工厂实例,并且未正确设置重新交付策略。默认重新传递策略(最大重新传递 = 6,有一些延迟)启动,导致重新传递消息的延迟。我正在使用 junit 测试用例测试行为,一旦测试用例完成,消费者就死了,但消息仍在等待重新传递。

标签: activemq dead-letter virtual-topic


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-30
    • 1970-01-01
    • 2013-11-15
    • 2014-01-28
    • 1970-01-01
    • 1970-01-01
    • 2016-12-10
    • 1970-01-01
    相关资源
    最近更新 更多