【问题标题】:Websphere MQ message doesnot backout to Input QueueWebsphere MQ 消息不回退到输入队列
【发布时间】:2016-04-24 00:58:21
【问题描述】:

在 Websphere MQ 中有一条消息。已阅读消息,我正在尝试将消息退回到输入队列。尚未达到重试阈值。发生异常时,MQ 消息会自动放入 Input Q 吗?这是我的代码:

MQQueueManager qm = new MQQueueManager("");
MQQueue q = qm.accessQueue("");
MQMessage message = new MQMessage();
q.get(message);
System.out.println("Retry Count"+ message.backoutCount);
throw new NullPointerException;

上面的代码会再次将消息放入Input Queue吗?在这种情况下,它不会将消息放回输入队列。消息丢失。

【问题讨论】:

    标签: java message-queue ibm-mq mq backout


    【解决方案1】:

    您的消息只有在最初是交易的一部分时才能被撤销。您的代码不使用事务。

    查看 MQGMO 选项,MQGMO_SYNCPOINTMQGMO_SYNCPOINT_IF_PERSISTENT(在以下两个链接中搜索字符串 MQGMO_SYNCPOINT)。

    MQ Java Classes CMQC constants

    MQ API description of MQGMO_SYNCPOINT - applicable to all languages

    还有MQQueueManager 上的 commit() 和 backout() 方法:

    MQQueueManager class

    并建议您阅读此交易的通用说明

    Committing and backing out units of work

    【讨论】:

    • 是的..它现在可以工作了..但我想澄清一件事..如果在处理味精时发生异常,味精是否会被退回到输入 Q 进行重新处理预配置的时间数?如果达到阈值,那么 msgs 是否移至 Backout Queue?就我而言,同样的事情也会发生。但是一旦我关闭应用程序,所有消息都会从 Backout Queue 移回 Input Queue。这再次发生在相同的重试次数中..在这里感到困惑..请帮助
    • 如果您在输入 q 上定义了回退队列和回退阈值,那么某些接口(不是基本 MQI)将只允许在将特定消息移动到退出队列。您的描述听起来像是您从未进行过交易?您能否使用同步点在您的代码中更新您的问题(或提出一个新问题)?
    猜你喜欢
    • 2011-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-18
    • 2013-10-22
    • 2013-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多