在 MQ 系列中配置“重试延迟”

Posted

技术标签:

【中文标题】在 MQ 系列中配置“重试延迟”【英文标题】:Configuring a 'retry delay' in MQ Series 【发布时间】:2010-11-22 07:31:26 【问题描述】:

我希望有人可以帮助我 - 我在基于 EJB/JMS 的应用程序中使用 JBoss 5.1 和 MQ Series 7。我的应用程序中有几个消息驱动的 bean,每个都侦听一个 MQ 系列消息队列。当在处理消息的过程中遇到错误时,我需要能够配置“重试延迟”,以便 mq 系列在尝试重新传递消息之前等待一段时间。我已经广泛梳理了 MQ 系列文档,但还没有找到在 MQ 系列中完成此操作的方法。我知道 JBoss 默认 JMS 提供程序有办法做到这一点,但我目前仅限于使用 MQ 系列。由于我无法设置重试延迟 - 当我有一条消息失败时,我的应用程序会陷入传递消息并连续回滚的紧密循环中。谁能帮助我了解 MQ 系列中是否有一些配置选项允许我在重新传递失败消息之前等待 X 毫秒?

【问题讨论】:

【参考方案1】:

您可以指定重试限制,以便在指定尝试后停止连续回滚。

【讨论】:

【参考方案2】:

这很可能是为此类问题构建一些基础设施的机会。

由于您可以在消息进入 bean 时查看 JMSDeliveryCount(在处理它之前 - 考虑提交范围),并且您可以看到它已经有几个回滚,因此将消息发送到暂存队列但是在 jms 属性中附加目标队列名称,以便您以后可以使用它。

一个简单的进程可以在某个时间间隔运行以清除暂存队列(例如每 5 分钟一次)并将消息发送到路由队列

另一个进程可以坐在路由队列上并查看 jms 属性(将目标队列名称添加到其中)并将消息发送到原始目标。

这是一个穷人的经纪人,但它会实现目标。确实没有太多内置功能可以真正做你想做的事。

【讨论】:

【参考方案3】:

我认为你运气不好。据我所知,在这种情况下您可以调整的唯一参数是重试消息的最大次数 (BOTHRESH) 以及发送消息的异常/回退队列 (BOQUEUE) 的名称(如果重试次数超过最大值。

帕尔

【讨论】:

以上是关于在 MQ 系列中配置“重试延迟”的主要内容,如果未能解决你的问题,请参考以下文章

Symfony Messenger:重试延迟不适用于 Redis 传输

重试延迟 - RxSwift

Node.js Nock 模拟请求超时和后续成功

Spring Cloud Feign 重试机制-如何实现请求重试

zuul网关重试机制探索

深入浅出Spring原理及实战「开发实战系列」重新回顾一下异常重试框架Spring Retry的功能指南和实战