2016-01-18 80 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)將只允許特定消息在被移出到退出隊列之前被多次退出。你的描述聽起來像你從未做過交易?你可以用你的代碼使用同步點提出你的問題(或提出一個新問題)嗎? –

相關問題