7

我正在使用 Spring JMS 连接到 Websphere MQ 服务器。我实现了 SessionAwareListener 接口来创建自定义侦听器,为业务逻辑重用旧代码。

测试时,侦听器抛出一个 StringIndexOutOfBoundsException,我没能捕捉到。但是,我在日志中看到打印了大约 32 次,然后 DMLC 停止。

WARN  - Execution of JMS message listener failed

有没有办法控制 DMLC 重试消息的频率,以及如何处理未捕获的异常?

4

2 回答 2

5

您可以随时检查 JMSDeliveryCount。如果它超过您认为的最大值,则不要处理消息并返回。

您还可以将 Websphere 配置为在一些尝试后将错误消息移动到异常目标。

于 2012-05-11T13:47:40.573 回答
5

在 Websphere MQ 世界中,在发生错误后将消息放回队列称为回退。

有两种选择如何处理它:

  1. 在队列管理器中:您可以为给定队列配置回退阈值回退重新队列名称属性。达到回退阈值后,队列管理器会将消息放入回退重新队列名称指定的队列中,而不是重新传递。有关更多信息,请参阅WebSphere MQ 队列属性

  2. 在您的应用程序中:如果您使用 JMS API,请在开始处理消息之前通过调用msessage.getIntProperty("JMSXDeliveryCount")检查 JMSXDeliveryCount 属性。如果它达到某个阈值,则将该消息作为错误处理。

于 2012-05-11T14:10:59.620 回答