我通过本地绑定从 MQ 队列读取 MDB。有时我们注意到来自 MQ 队列的消息没有被拾取队列深度增加到 50000 并且实例数变为零。执行线程总数为 25。一台物理机中有 8 台托管服务器。
问问题
882 次
1 回答
1
这听起来像是一个有毒的信息问题。如果无法传递队列中的消息(例如无效标头或未知格式),则 WMQ JMS 类将尝试重新排队。首先,他们将在队列的 BOQNAME 和 BOQTHRESH 属性中查找值。如果这些存在,则一旦回退计数超过 BOQTHRESH,消息将被放置在以 BOQNAME 命名的队列中。如果重新排队到此队列时出现问题,则消息将被放置在死信队列中。如果这无法完成,MDB 将停止接收消息。
重新排队消息有几个可能的问题:
- BOQNAME 队列或 DLQ 不存在
- 重新入队目标队列存在,但 ID 消费消息对其没有权限
- 重新入队目标队列已满
- BOQNAME 或 BOQTHRESH 中没有值
如果您尚未定义回退队列,请定义一个并将其名称放在输入队列的 BOQNAME 属性中。接下来,在输入队列的 BOQTHRESH 属性中放置一个值(通常使用“10”)。确保将使用消息的应用程序授权到新的回退队列,并在进行这些更改后重新启动应用程序。如果问题是有害消息,您现在应该会看到有害消息落在回退队列中,然后主输入队列应该正常排空。
于 2011-05-30T17:03:31.767 回答