如何防止 Java MDB 在 IBM Websphere WAS 8.5 上因错误而暂停?

How to prevent Java MDB from pausing on errors on IBM Websphere WAS 8.5?

抛出异常后,我们的 Java MDB 应用程序的 MQ 消息端点正在暂停并显示消息

CWWMQ0007W: The message endpoint <APP> has been paused by the system.  Message delivery failed to the endpoint more than <N> times.

我了解这是根据应用程序规范进行的,并且此行为对于许多应用程序都是合理的。

在我们的例子中,我们希望导致异常的 MQ 消息从队列中被消耗,应用程序剩余 运行,即。处理下一条消息。

除了在 MDB onMessage 方法中捕获任何 Throwable 之外,还有什么方法可以实现这种方式吗?

阅读这篇文章 How WebSphere Application Server V8.x handles poison messages,它描述了各种场景。

如果您只想继续处理而不停止端点,请取消选中 Stop endpoint if message delivery fails 或在激活规范配置中将 Number of sequential delivery failures before suspending endpoint 设置为某个更高的值。您还必须在 WebSphere MQ 中配置 Backout threshold (BOTHRESH) 属性。

通过这种方式,异常消息将由 MQ 放入 DEAD.LETTER.QUEUE 并允许您处理下一条消息。