gpt4 book ai didi

java - session 回滚、撤销和死信处理程序

转载 作者:行者123 更新时间:2023-12-02 00:05:24 27 4
gpt4 key购买 nike

我正在使用 MQQueueSession.rollback() 来回滚工作单元。消息被移至 BACKOUT 队列,这样就可以了。

问题是如何处理回退队列中的这些消息?我读到我可以使用 runmqdlq 工具,但它仅适用于以 MQDLH 为前缀的消息。简单的 MQQueueSession.rollback() 似乎没有这样做。我做错了什么?

代码示例:

MQQueueConnection connection;
// ...
MQQueueSession session = (MQQueueSession) connection.createQueueSession(true, Session.SESSION_TRANSACTED);
MQQueue queue = (MQQueue) session.createQueue("queue:///TEST");
MQQueueReceiver receiver = (MQQueueReceiver) session.createReceiver(queue);
JMSTextMessage message = null;

try {
message = (JMSTextMessage) receiver.receive();
// ...
session.commit();
} catch (JMSException e) {
session.rollback();
e.printStackTrace();
}

最佳答案

由于某些原因,MQ JMS 提供程序可以将消息回退到回退队列或死信队列。其中一些是

1) 消息格式错误
2) 客户端应用程序未通过在事务处理 session 中执行 Commit 或在客户端确认 session 中执行 Message.Acknowledge() 来确认消息。在这种情况下,将重新传送消息。如果一次又一次地传递相同的消息,MQ JMS 提供程序会根据队列上的 BOTHRESH 设置将该消息移至退出队列。

以上称为“Poison Message”处理。

很多时候,队列可能没有定义退出队列 (BOQUEUE)。在这种情况下,MQ JMS 提供程序会将有害消息移动到带有 DLQ header 前缀的死信队列 (DLQ)。您可以使用 runmqdlq 处理 DLQ 中的消息。

回退队列中的消息没有任何像DLQ一样的 header 前缀。您需要调查为什么消息会在那里结束。修复原因并将消息移回原始队列,以便消息可以传递到应用程序。

关于java - session 回滚、撤销和死信处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13990904/

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