gpt4 book ai didi

jms - 删除正在重新传送的消息

转载 作者:行者123 更新时间:2023-12-05 03:14:08 25 4
gpt4 key购买 nike

我设置了一个 ActiveMQ 代理和一个消费者。消费者收到一条他无法处理的消息,因为它所依赖的服务存在错误(一旦修复就可以了)。所以消息不断被重新传递(消费者重新传递)——我们使用 JMS session 。使用我们当前的配置,它将在 1 天内每 10 分钟重新发送一次。这显然会导致问题,因为没有使用其他消息。

为了解决这个问题,我通过 JMX 访问了队列并尝试删除该消息,但它不存在。我猜它缓存在消费者身上,在经纪人身上不可见。除了重新启动应用程序之外,还有什么方法可以删除此消息吗?

是否可以配置重新传递机制,以便将此类消息(最终导致活锁)放在队列的末尾,以便可以处理其他消息?

1 天 10 分钟重新投递政策应保持不变。

最佳答案

我认为您是对的,消息卡在消费者的预取缓冲区中,我不知道有什么方法可以从那里删除它们。

我会更改您的重新传送策略以在第二次失败后发送到 DLQ,它们之间的间隔要短得多,例如 30 秒,并且我会将 DLQ 策略配置为 individualDeadLetterStrategy所以你得到一个单独的 DLQ,只包含来自这个特定队列的消息。然后在此 DLQ 上设置一个消费者,以便在满足重新处理条件时将消息移动到主队列(的末尾)(无论是在一定延迟之后,还是基于从数据库中读取一些标志值,等等)。该消费者是您实现“1 天每 10 分钟”逻辑的地方,而不是在您当前拥有的重新投递政策中。

这会将垃圾消息排除在主队列之外,这样它们就不会延迟其他消息的使用,但仍然确保它们稍后会被重新处理。它将把它们放在代理上而不是消费者的预取缓冲区中,您可以在其中查看和删除它们。

关于jms - 删除正在重新传送的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26865725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com