2016-01-18 82 views
0

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

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; 

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

回答

1

如果您的邮件是开始的交易的一部分,则只能退出。您的代码不使用交易。

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

MQ Java Classes CMQC constants

MQ API description of MQGMO_SYNCPOINT - applicable to all languages

而且还commit()和退出()方法:

MQQueueManager class

,并建议你阅读交易

的这个通用的解释

Committing and backing out units of work

+0

是的,它现在可以工作了。但我想澄清一件事情。如果在处理msg时发生异常,msg是否会退出到输入Q,以便重新处理预处理次数,配置时间?如果达到阈值,则邮件移动到退出队列?在我的情况下,同样的事情发生。但是,一旦关闭应用程序,所有消息就会从Backout Queue中移回输入队列。这再次发生相同的重试计数次数..在这里得到困惑..请帮助 – Karthik

+0

如果您在输入q上定义了退出队列和退出阈值,那么某些接口(不是基本的MQI)将只允许特定消息在被移出到退出队列之前被多次退出。你的描述听起来像你从未做过交易?你可以用你的代码使用同步点提出你的问题(或提出一个新问题)吗? –

相关问题