我希望有人可以帮助我——我在基于 EJB / JMS 的应用程序中使用 JBoss 5.1 和 MQ Series 7。我的应用程序中有几个消息驱动的 bean,每个都侦听一个 MQ 系列消息队列。当在处理消息的过程中遇到错误时,我需要能够配置“重试延迟”,以便 mq 系列在尝试重新传递消息之前等待一段时间。我已经广泛梳理了 MQ 系列文档,但还没有找到在 MQ 系列中完成此操作的方法。我知道 JBoss 默认 JMS 提供程序有办法做到这一点,但我目前仅限于使用 MQ 系列。由于我无法设置重试延迟 - 当我有一条消息失败时,我的应用程序会陷入传递消息并连续回滚的紧密循环中。
Rick Snyder
问问题
4177 次
3 回答
7
这可能是为此类问题构建一些基础设施的机会。
由于您可以在消息进入 bean 时查看 JMSDeliveryCount(在处理它之前 - 考虑提交范围)并且您可以看到它已经有几个回滚,因此将消息发送到暂存队列但附加jms 属性中的目标队列名称,以便您以后可以使用它。
一个简单的进程可以在某个时间间隔运行以清除暂存队列(例如每 5 分钟)并将消息发送到路由队列。
另一个进程可以坐在路由队列上并查看 jms 属性(将目标队列名称添加到其中)并将消息发送到原始目标。
这是一个穷人的经纪人,但它会实现目标。确实,没有太多内置功能可以真正做你想做的事。
于 2009-11-11T16:33:20.640 回答
3
我觉得你运气不好。据我所知,在这种情况下您可以调整的唯一参数是重试消息的最大次数 (BOTHRESH) 以及发送消息的异常/回退队列 (BOQUEUE) 的名称(如果重试次数超过最大值。
帕尔
于 2009-11-06T05:51:05.967 回答
0
您可以指定重试限制,以便连续回滚将在指定尝试后停止。
于 2010-05-27T13:21:19.227 回答