gpt4 book ai didi

ibm-mq - Websphere 7 + Websphere MQ 7.X + Spring Integration + JMS - 消息监听器停止从队列读取消息

转载 作者:行者123 更新时间:2023-12-04 20:08:24 25 4
gpt4 key购买 nike

我们正在使用 JMS 和 Spring Integration 从 Websphere MQ 读取消息。

<task:executor id="demoMessageReceiverChannelTE" pool-size="1-3" queue-capacity="5" keep-alive="1" rejection-policy="CALLER_RUNS"/>

<int:channel id="demoMessageReceiverChannel">
<int:dispatcher task-executor="demoMessageReceiverChannelTE"/>
<int:interceptors>
<int:ref bean="messageReceiverInterceptor" />
</int:interceptors>
</int:channel>

<jms:message-driven-channel-adapter
id="demoMesssageReceiverAdapter" channel="demoMessageReceiverChannel"
connection-factory="srcJmsConnectionFactory" destination="srcReceiverQueue"
error-channel="errorChannel" message-converter="demoIncomingMessageConverter"
transaction-manager="srcJmsTransactionManager" send-timeout="65000"
header-mapper="demoJmsHeaders" />

还有另一个系统,它把消息放在这个队列上。 (超出我们的范围)

我们一次可以在队列中读取 2000 条消息。

有时,消息监听器停止从队列读取消息,当我尝试解决此问题时,它给出了队列上有一些未提交的消息的原因,该监听器尝试读取并且无法进一步处理并自行卡在那里.

当从队列中手动删除该消息时,它会完美地处理其他消息。

那么如何跳过这些未提交的消息,以便系统可以继续处理下一条消息呢?

最佳答案

听起来像一个经典的未处理的毒信息问题。当应用程序读取它无法处理的消息时,该消息将被退回到队列中。由于它位于队列的顶部,因此它会被再次读回。这导致消息似乎在同步点下,直到最后监听器放弃并停止。

有时问题出在应用程序中,是应用程序显式调用 ROLLBACK .有时虽然回滚发生在应用程序甚至看到消息之前。例如,如果消息无法转换为本地代码页,或其他低级错误。

如果发生这种情况,答案是定义一个退出队列,然后更改输入队列以指向它。例如,如果输入队列被称为 SRC.RECEIVER.QUEUE你可以使用 runmqsc 在 QMgr 上做类似的事情:

DEFINE QL(SRC.RECEIVER.QUEUE.BKOUT)
ALTER QL(SRC.RECEIVER.QUEUE) BOQNAME(SRC.RECEIVER.QUEUE.BKOUT) BOTHRESH(15)

如果问题确实是有害消息,则问题消息将作为未提交的消息显示在回退队列中。一旦应用程序发出下一个 COMMIT针对源队列,回退消息将在回退队列中可见。如果没有其他消息到达源队列,则如果 ROLLBACK,有害消息将在回退队列中保持未提交状态或可能恢复到源队列。由应用程序或 QMgr 调用。

退出队列的设置很简单,应该是标准做法,因此无论是否解决问题,我都建议您这样做。请查看 Handling poison messages in WebSphere MQ classes for JMS在信息中心。

关于ibm-mq - Websphere 7 + Websphere MQ 7.X + Spring Integration + JMS - 消息监听器停止从队列读取消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22408323/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com