jms消息没有移动websphere中的队列

时间:2010-06-01 15:27:00

标签: java websphere jms ibm-mq

我有一个消息驱动的bean,在某些条件下抛出异常。当它抛出异常时,不处理该消息并将其放回队列。根据我对MQ和WAS(Websphere Application Server)的理解,在尝试x次并从队列中删除后,该消息应被标记为坏。这种情况没有发生,消息仍然标记为坏的队列。

我错过了设置正确的MQ和/或WAS中的哪些配置?

(MDB抛出异常的问题不是重点)

感谢。

2 个答案:

答案 0 :(得分:4)

在队列中有属性BOQNAME和BOQTHRESH。必须将这些设置为要重新排队消息的退出队列的名称以及重新排队消息之前的退出次数阈值。

此外,QMgr必须能够将消息放入指定的队列。问题可能包括队列名称拼写错误,回退队列已满或运行MDB的帐户未被授权将消息放入回退队列。

如果MDB检测到有毒消息循环且无法重新排队该消息,则会停止处理。您仍将看到该线程,但您将缺少队列中的一个或多个打开的输入句柄。在这种情况下,必须重新启动应用程序才能恢复它。

避免将系统的DLQ用于退出目的地。 DLQ是QMgr将来自另一个无法解析到目标队列的QMgr的消息放置的地方。这些将附加死信头,而重新排队的MDB消息则不会。这可能会导致您观看DLQ的任何自动化出现问题。因此,建议每个应用程序都有一个 DLQ的异常队列。

BOQTHRESH应该大于1或2,因为正常操作(例如关闭QMgr或通道)可能导致退出。我通常将BOQTHRESH设置为5或10,但看到人们设置得更高。取决于您对重试的容忍度以及退出是否通常是由填充日志范围等瞬态条件引起的。

答案 1 :(得分:1)

请看这篇How WebSphere handles poison messages文章 它适用于WAS 5,但原则没有改变。