在MQ Series中配置“重试延迟”

8

我希望有人能帮助我 - 我正在使用JBoss 5.1和MQ Series 7开发基于EJB / JMS的应用程序。 我的应用程序中有几个消息驱动的bean,每个bean都在一个MQ Series消息队列上监听。 当在处理消息期间遇到错误时,我需要能够配置“重试延迟”,以便mq系列在尝试重新传递消息之前等待一段时间。 我已经彻底查阅了MQ Series文档,并且尚未找到在MQ Series中实现此操作的方法。 我知道JBoss默认的JMS提供程序有一种方法可以做到这一点,但是我目前只能使用MQ Series。 由于我无法设置重试延迟 - 当我有一个失败的消息时,我的应用程序会陷入连续传送消息并不断回滚的死循环中。 是否有人能帮助我了解是否有MQ Series中的某些配置选项可以允许我在重新传递失败的消息之前等待X毫秒?

3个回答

7
这很可能是为这样的问题构建一些基础设施的机会。
您可以在消息进入bean时查看JMSDeliveryCount(在处理之前--考虑提交范围),并且您可以看到它已经有了几个回滚,将消息发送到一个暂存队列中,但附加目标队列名称在jms属性中,以便稍后使用。
一个简单的过程可以定期运行以清除暂存队列(例如每5分钟),并将消息发送到路由队列。
另一个进程可以坐在路由队列上,查看jms属性(添加了目标队列名称),并将消息发送到原始目标。
这是一个穷人的代理,但它将实现目标。确实没有太多内置的东西可以真正做你想要的事情。

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

0

您可以指定重试次数,以便在指定的尝试次数后停止连续回滚。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接