2012-03-13 95 views
2

有幾次我收到以下錯誤從.NET(C#4.0)上發送消息通生產者應用了藍色的:的IBM WebSphere XMS.Net CWSMQ0082E錯誤

CWSMQ0082E: Failed to send to CompCode: 2, Reason: 2009. A problem was encountered whilst sending a message. See the linked exception for more information.

當然,LinkedException(爲什麼不使用IBM ???的InnerException)爲空,即沒有更多信息可用。我使用

代碼(很簡單):

var m = _session.CreateBytesMessage(); 
m.WriteBytes(mybytearray); 

m.JMSReplyTo = myreplytoqueue; 
m.SetIntProperty(XMSC.JMS_IBM_MSGTYPE, MQC.MQMT_DATAGRAM); 

m.SetIntProperty(XMSC.JMS_IBM_REPORT_COA, MQC.MQRO_COD); 
m.SetIntProperty(XMSC.JMS_IBM_REPORT_COD, MQC.MQRO_COA); 

myproducer.Send(m, DeliveryMode.Persistent, mypriority, myttl); 

(Offtopic:我討厭設置屬性的SetIntProperty方式,也<髒話刪除>想出了這個主意它需要年齡看?各種各樣的常數及其允許的值)

在.Send方法上拋出異常。我使用的是XMS.Net(IA9H/2.0.0.7)。turns up原來有一個不同的原因代碼(即使它是相同的,如果我理解正確,它應該在我的版本中修復)。這是隨機發生的(雖然它似乎更常發生,因爲消息已經發送/接收了一段時間),並且我無法重現這一點。

我有ab-so-lute-ly 沒有想法如何解決這個問題甚至從哪裏開始尋找。這是由服務器端引起的嗎?它是由XMS.net還是某些底層的IBM WebSphere MQ基礎架構引起的?

一些結果,我發現,似乎類似建議被設置SHARECNV任何大於0的值或爲「true」 /「是」,但the documentation明確地告訴我,默認值是10。此外,我不知道這是不是原因,所以把它改成另一個值就像是霰彈槍的方法。

任何人有任何想法如何去解決這個問題?我當然可以抓住這個例外,把所有東西(渠道,會話,任何東西)都撕下來然後重新開始,但這只是簡單的醜陋的恕我直言。

回答

4

2009年的返回碼意味着「連接斷開」。基本上,底層的TCP套接字不見了,客戶端在調用API時發現它。可以使用心跳和保持活動來調諧通道,以便WMQ盡力保持套接字的活躍。但是,如果套接字由底層基礎架構超時,則WMQ無法提供任何幫助。我們看到的例子是,防火牆和負載平衡器通常設置爲檢測空閒連接並切斷它們。

現代版本的WMQ客戶端將嘗試reconnect transparently。發生這種情況時,應用程序會稍微阻塞一點。

短缺使用自動重新連接,唯一的解決方案實際上是重建連接。由於它會得到一個新的連接句柄,因此所有的對象句柄也必須重新構建。

此處描述的許多調整功能可通過client configuration file獲得,可從v7.0及更高版本的客戶端獲得。特別是,該文件的TCP stanza可啓用Keepalive。 (TCP規範說,如果提供keepalive,默認情況下它必須被禁用。)QMgr有a similar ini file配置節,其中一個用於keepalive。如果您需要,最新的WMQ客戶端可用SupportPac MQC71

+0

嗨,謝謝你的迴應。我發佈了這個問題後,事實上,我的客戶端升級到7.1.0.0並使用autoreconnect功能進行播放。事實證明,MQ服務器版本是6.x(不知道確切地說)並且爲了使autoreconnect工作,服務器版本需要是7.0.1。由於我無法控制「對方」,因此恐怕我無能爲力。 我會研究你提供的其他建議。 – RobIII 2012-03-14 09:33:41

+0

哦,順便說一句,重建所有MQ對象(連接,會話,生產者/消費者等)將會是地獄。我正在考慮使用這些對象(或者至少是它的通信部分)來拆除整個(Windows NT)服務,並將其重新啓動,作爲一種快速而又髒又有效且安全的選項。 .. – RobIII 2012-03-14 09:41:22

+0

這聽起來有點醜陋,但正如你所說它是快而又髒但是有效且安全的。 V6是9月份的報廢產品,所以希望你能有一個V7.x QMgr很快可以使用。如果這是WMQ管理團隊的新聞,請隨時與我聯繫,我可以給他們提供EOS通告的鏈接,並與他們討論遷移問題。 v7.1中的安全功能足以讓v7.0完全跳過。 – 2012-03-14 14:07:49

4

在主例外足以表明錯誤的情況下,內部異常將爲空。在你的情況下,它是MQ原因碼2009,這意味着與隊列管理器的連接已斷開。由於某種原因,應用程序和隊列管理器通信的套接字已關閉。套接字關閉的原因可能是網絡曇花一現。

除了T.Rob上面提到的建議之外,您還可以運行XMS和隊列管理器跟蹤以進一步瞭解問題。請參閱XMS InfoCenter中的故障排除章節。

HTH