2012-10-24 85 views
2

我用MQ v7庫(No JMS)編寫了一個簡單的Java客戶機。我嘗試使用下面的模式放在一個隊列中的消息:長時間空閒後放置消息不起作用

Put a message 
Wait for x minutes 
Put a message again 

它的工作原理,但如果空閒時間過長(5-7分鐘),我收到以下錯誤:

MQJE001: An MQException occurred: Completion Code 2, Reason 2195 
MQJE007: IO error reading message data 
Error occured during API call - reason code0 
MQJE001: Completion Code 2, Reason 2009 
MQJE001: An MQException occurred: Completion Code 2, Reason 2009 
MQJE003: IO error transmitting message buffer 
MQJE001: Completion Code 2, Reason 2009 
MQJE001: An MQException occurred: Completion Code 2, Reason 2009 
MQJE003: IO error transmitting message buffer 
MQJE001: Completion Code 2, Reason 2009 
MQJE001: An MQException occurred: Completion Code 2, Reason 2009 
MQJE003: IO error transmitting message buffer 
MQJE001: Completion Code 2, Reason 2009 
MQJE001: An MQException occurred: Completion Code 2, Reason 2009 
MQJE003: IO error transmitting message buffer 
MQJE001: An MQException occurred: Completion Code 2, Reason 2009 
MQJE003: IO error transmitting message buffer 
MQJE001: Completion Code 2, Reason 2009 
An MQSeries error occurred : Completion code 2 Reason code 2009 
com.ibm.mq.MQException: MQJE001: Completion Code 2, Reason 2009 
     at com.ibm.mq.MQQueue.put(MQQueue.java:1511) 

在讀取主題上的多個線程後,此錯誤通常會創建FDC轉儲,但我在系統和隊列管理器日誌中沒有任何內容。該頻道是一個SVRCONN頻道。

回答

1

好吧,這裏有一些有趣的可能性,並沒有足夠的描述來縮小非常多,所以我會採取霰彈槍的方法,你可以從那裏去。

長時間等待的錯誤通常意味着套接字超時或被防火牆或網絡策略切斷。

  • 該應用程序是否指定失敗如果靜默等待?
  • 哪個版本的客戶端和QMgr?一般來說,即使使用舊版的QMgrs,客戶端的更新版本也會更好。最好的情況是最近的客戶端最近的QMgr,在這種情況下,WMQ原生協議心跳比TCP心跳更可靠。你提到過V7,但可能是V7.0.0,V7.0.1,V7.1或V7.5。

在這種情況下,它是客戶獲得2195所以我預計錯誤,顯示在客戶端上。如果2195發生在客戶端,並且在套接字消失之後,QMgr將不會剪切FDC文件,因爲那時它不知道錯誤。客戶端診斷可以更清楚地瞭解正在發生的事情。

  • 您是從IBM的媒體獲取jar文件還是安裝客戶端?如果您擁有完整的客戶端,則可以有多種跟蹤和本地診斷的選項。否則,你只有Java跟蹤工具。
  • 客戶端的本地錯誤日誌文件或FDC顯示什麼?

在QMgr方面,2009年通常會產生一條消息,說明通道已斷開連接,但沒有FDC。但是,QMgr可能不知道通道已斷開連接,直到TCP超時爲止,並且大多數系統默認的間隔時間爲2小時。因此在連接丟失後,日誌中的錯誤可能不會寫入長達兩小時的

  • 可以調整頻道以響應快於2小時的LOT。確切的調整取決於前面討論的正在使用的QMgr和客戶端版本。
  • 發生這種情況時,是否還有剩餘的孤立通道實例在運行?當你做一個DIS CHS(svrconn name)是否有任何不被活動程序記錄的條目?如果無法辨別,請將失敗的程序移至專用的SVRCONN通道。
  • 什麼是主機服務器的全系統TCP超時設置爲?

如前所述,您使用的版本在調整和診斷方面有很大不同。如果這是新的開發,我會建議的第一件事是確保您使用V7.5 client。它可以與任何QMgr一起使用,但調優和診斷比早期版本更好。如果QMgr的版本不支持它們,您將不會獲得對話共享或預讀的功能,但您確實從所有純粹的客戶端改進中受益匪淺。

+0

罐子被嵌入在Java客戶端,它是v5.3 jars o_O。使用v7 jar解決了這個問題。 Thx爲答案。 – Sydney

+0

D'oh!這發生了很多。在某些情況下,我們看到用戶報告已安裝WMQ客戶端的PMR,但當我們查看FDC文件時,它會報告不同的版本。挖掘一下,通常情況下,應用程序捆綁了客戶端jar,並且沒有對已安裝的客戶端應用維護或修復的影響。新版本的WMQ服務器報告正在連接的WMQ客戶端的版本以幫助解決此問題。 –