2013-03-08 22 views
3

我正在連接到JMS隊列。隊列由WebSphere Application Server(版本8.0.0.5)使用SIBus進行託管。XMS - 如何在網絡中斷後恢復與WebSphere SIBus的連接

我有一個簡單的程序來重現一些有問題的行爲,它用C#編寫並使用XMS(IBM的.NET API)連接到隊列。 注意:我得從這裏IBM.XMS dll文件:MQC71: WebSphere MQ V7.1 Clients

的情況是這樣的:

  1. 運行程序(使用空隊列,所以它坐落在等待阻塞收取來電)
  2. 斷開網絡(拔掉以太網)
  3. 幾分鐘後,接收呼叫拋出異常
  4. 程序試圖重新連接
  5. 失敗由於網絡是向下
  6. ...讓它循環一點來驗證這個錯誤持續發生
  7. 恢復網絡(以太網插頭)
  8. 同樣的錯誤繼續出現(驗證使用Wireshark該connectionFactory.CreateConnection()調用期間沒有出現網絡流量)

所以,問題是:爲何創建連接()調用什麼都不做(不發送任何數據包),但失敗了呢?

using IBM.XMS; 
using System; 

namespace SimpleTest 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      while (true) 
      { 
       try 
       { 
        string queueURI = "queue://your.details.GoHereDearReader"; 
        string providerEndpoint = "1.2.3.4:1234"; 
        string targetTransportChain = "InboundBasicMessaging"; 
        string busName = "some_bus_name"; 

        XMSFactoryFactory factoryFactory = XMSFactoryFactory.GetInstance(XMSC.CT_WPM); 
        IConnectionFactory connectionFactory = factoryFactory.CreateConnectionFactory(); 
        connectionFactory.SetStringProperty(XMSC.WPM_PROVIDER_ENDPOINTS, providerEndpoint); 
        connectionFactory.SetStringProperty(XMSC.WPM_TARGET_TRANSPORT_CHAIN, targetTransportChain); 
        connectionFactory.SetStringProperty(XMSC.WPM_BUS_NAME, busName); 

        Log("Connecting..."); 
        using (var connection = connectionFactory.CreateConnection()) 
        { 
         using (var session = connection.CreateSession(false, AcknowledgeMode.AutoAcknowledge)) 
         { 
          using (var destination = session.CreateQueue(queueURI)) 
          { 
           destination.SetIntProperty(XMSC.DELIVERY_MODE, XMSC.DELIVERY_NOT_PERSISTENT); 
           connection.Start(); 

           using (IMessageConsumer consumer = session.CreateConsumer(destination)) 
           { 
            Log("Receiving..."); 
            IMessage recvMsg = consumer.Receive(); 
            Log("recvMsg:" + recvMsg); 
           } 
          } 
         } 
        } 
       } 
       catch (Exception e) 
       { 
        Log(e.ToString()); 
       } 
       Log("Sleeping some before consuming more..."); 
       System.Threading.Thread.Sleep(10 * 1000); 
      }//while 
     }//Main 

     static void Log(string text) 
     { 
      Console.WriteLine(DateTime.UtcNow.ToString("HH:mm:ss.fff") + "-------------------------- " + text); 
     } 

    } 
} 

和一些輸出:

16:38:19.483-------------------------- Connecting... 
16:38:19.936-------------------------- Receiving... 
16:43:31.952-------------------------- IBM.XMS.XMSException: EXCEPTION_RECEIVED_CWSIA0022 
EXCEPTION_RECEIVED_CWSIA0022.explanation 
EXCEPTION_RECEIVED_CWSIA0022.useraction 
    at IBM.XMS.Impl.Connection.Dispose(Boolean disposing) 
    at IBM.XMS.Impl.Connection.Dispose() 
    at SimpleTest.Program.Main(String[] args) in c:\Users\Administrator\Documents\Visual Studio Projects\TestJMSDequeue\SimpleTest\Program.cs:line 43 

Linked Exception : IBM.XMS.SIB.JFAP.JFapConversationClosedException: Exception of type 'IBM.XMS.SIB.JFAP.JFapConversationClosedException' was thrown. 
    at IBM.XMS.SIB.JFAP.ConversationImpl.Send(IByteBuffer[] data, JFAPSegmentType segmentType, UInt16 requestNumber, IoPriority priority, Boolean pooledBufferHint, IReceiveListener recvListener, ISendListener sendListener, Object state) 
    at IBM.XMS.SIB.JFAP.ConversationImpl.RequestReplyExchange(IByteBuffer[] data, JFAPSegmentType segmentType, UInt16 requestNumber, IoPriority priority, Boolean pooledBufferHint) 
    at IBM.XMS.SIB.JFAP.ConversationImpl.RequestReplyExchange(IByteBuffer data, JFAPSegmentType segmentType, UInt16 requestNumber, IoPriority priority, Boolean pooledBufferHint) 
    at IBM.XMS.SIB.Comms.Client.JFAPCommunicator.RequestReplyExchange(IByteBuffer data, JFAPSegmentType sendSegType, MessagePriority priority, Boolean canPoolOnReceive) 
    at IBM.XMS.SIB.Comms.Client.ConnectionProxy.Close() 
    at IBM.XMS.Impl.Connection.Dispose(Boolean disposing) 
16:43:31.952-------------------------- Sleeping some before consuming more... 
16:43:41.967-------------------------- Connecting... 
Exception : System.InvalidOperationException: UniqueLinkObject no seen on handshake. 
    at IBM.XMS.Formats.MFP.SIB.SchemaManager.SendSchemas(ICommsConnection connection, JMFSchema[] schemas) 
    at IBM.XMS.Formats.MFP.SIB.JsMsgObject.Encode(Object connection) 
FFDC to xmsffdc8416_2013.03.08T10.43.41.967444.txt 
Exception : IBM.XMS.Formats.MFP.MessageEncodeFailedException: Exception of type 'IBM.XMS.Formats.MFP.MessageEncodeFailedException' was thrown. ---> System.InvalidOperationException: UniqueLinkObject no seen on handshake. 
    at IBM.XMS.Formats.MFP.SIB.SchemaManager.SendSchemas(ICommsConnection connection, JMFSchema[] schemas) 
    at IBM.XMS.Formats.MFP.SIB.JsMsgObject.Encode(Object connection) 
    --- End of inner exception stack trace --- 
    at IBM.XMS.Formats.MFP.SIB.JsMsgObject.Encode(Object connection) 
    at IBM.XMS.Formats.MFP.SIB.TrmFirstContactMessageImpl.Encode(Object connection) 
    at IBM.XMS.SIB.Trm.ClientBootstrapHandler.Connect(IClientConnection clientConnection) 
FFDC to xmsffdc8416_2013.03.08T10.43.41.983044.txt 
16:43:41.983-------------------------- IBM.XMS.XMSException: EXCEPTION_RECEIVED_CWSIA0241 
EXCEPTION_RECEIVED_CWSIA0241.explanation 
EXCEPTION_RECEIVED_CWSIA0241.useraction 
    at IBM.XMS.Impl.ConnectionFactory.CreateConnection(String userName, String password) 
    at IBM.XMS.Impl.ConnectionFactory.CreateConnection() 
    at SimpleTest.Program.Main(String[] args) in c:\Users\Administrator\Documents\Visual Studio Projects\TestJMSDequeue\SimpleTest\Program.cs:line 26 

Linked Exception : IBM.XMS.Core.SIResourceException: CWSIT0006E: It is not possible to connect to bus your_bus_name_here because the following bootstrap servers could not be contacted 1.2.3.4:1234:BootstrapBasicMessaging and the following bootstrap servers returned an error condition . See previous messages for the reason for each bootstrap server failure. 
The client cannot connect to the bus. This situation may be due to configuration problems, network problems or it may be that none of the required bootstrap servers or messaging engines are currently available. 
Ensure that the network is working correctly and that the required bootstrap servers and messaging engines are available. ---> IBM.XMS.Core.SIConnectionLostException: Exception of type 'IBM.XMS.Core.SIConnectionLostException' was thrown. 
    at IBM.XMS.SIB.Comms.Client.ClientSideConnection.Connect(ConnectionProperties cp, IClientComponentHandshake cch, SICoreConnectionProperties siProps) 
    at IBM.XMS.SIB.Trm.TrmSICoreConnectionFactoryImpl.Bootstrap(Credentials credentials, SICoreConnectionProperties connectionProperties, ClientAttachProperties cap) 
    --- End of inner exception stack trace --- 
    at IBM.XMS.SIB.Trm.TrmSICoreConnectionFactoryImpl.Bootstrap(Credentials credentials, SICoreConnectionProperties connectionProperties, ClientAttachProperties cap) 
    at IBM.XMS.SIB.Trm.TrmSICoreConnectionFactoryImpl.CreateConnection(Credentials credentials, SICoreConnectionProperties connectionProperties) 
    at IBM.XMS.SIB.Trm.TrmSICoreConnectionFactory.CreateConnection(String username, String password, SICoreConnectionProperties connectionProperties) 
    at IBM.XMS.Impl.ConnectionFactory.CreateConnection(String userName, String password) 
16:43:41.983-------------------------- Sleeping some before consuming more... 
16:43:51.998-------------------------- Connecting... 
Exception : System.InvalidOperationException: UniqueLinkObject no seen on handshake. 
    at IBM.XMS.Formats.MFP.SIB.SchemaManager.SendSchemas(ICommsConnection connection, JMFSchema[] schemas) 
    at IBM.XMS.Formats.MFP.SIB.JsMsgObject.Encode(Object connection) 
FFDC to xmsffdc8416_2013.03.08T10.43.51.998262.txt 
Exception : IBM.XMS.Formats.MFP.MessageEncodeFailedException: Exception of type 'IBM.XMS.Formats.MFP.MessageEncodeFailedException' was thrown. ---> System.InvalidOperationException: UniqueLinkObject no seen on handshake. 
    at IBM.XMS.Formats.MFP.SIB.SchemaManager.SendSchemas(ICommsConnection connection, JMFSchema[] schemas) 
    at IBM.XMS.Formats.MFP.SIB.JsMsgObject.Encode(Object connection) 
    --- End of inner exception stack trace --- 
    at IBM.XMS.Formats.MFP.SIB.JsMsgObject.Encode(Object connection) 
    at IBM.XMS.Formats.MFP.SIB.TrmFirstContactMessageImpl.Encode(Object connection) 
    at IBM.XMS.SIB.Trm.ClientBootstrapHandler.Connect(IClientConnection clientConnection) 
FFDC to xmsffdc8416_2013.03.08T10.43.51.998262.txt 
16:43:51.998-------------------------- IBM.XMS.XMSException: EXCEPTION_RECEIVED_CWSIA0241 
EXCEPTION_RECEIVED_CWSIA0241.explanation 
EXCEPTION_RECEIVED_CWSIA0241.useraction 
    at IBM.XMS.Impl.ConnectionFactory.CreateConnection(String userName, String password) 
    at IBM.XMS.Impl.ConnectionFactory.CreateConnection() 
    at SimpleTest.Program.Main(String[] args) in c:\Users\Administrator\Documents\Visual Studio Projects\TestJMSDequeue\SimpleTest\Program.cs:line 26 

Linked Exception : IBM.XMS.Core.SIResourceException: CWSIT0006E: It is not possible to connect to bus your_bus_name_here because the following bootstrap servers could not be contacted 1.2.3.4:1234:BootstrapBasicMessaging and the following bootstrap servers returned an error condition . See previous messages for the reason for each bootstrap server failure. 
The client cannot connect to the bus. This situation may be due to configuration problems, network problems or it may be that none of the required bootstrap servers or messaging engines are currently available. 
Ensure that the network is working correctly and that the required bootstrap servers and messaging engines are available. ---> IBM.XMS.Core.SIConnectionLostException: Exception of type 'IBM.XMS.Core.SIConnectionLostException' was thrown. 
    at IBM.XMS.SIB.Comms.Client.ClientSideConnection.Connect(ConnectionProperties cp, IClientComponentHandshake cch, SICoreConnectionProperties siProps) 
    at IBM.XMS.SIB.Trm.TrmSICoreConnectionFactoryImpl.Bootstrap(Credentials credentials, SICoreConnectionProperties connectionProperties, ClientAttachProperties cap) 
    --- End of inner exception stack trace --- 
    at IBM.XMS.SIB.Trm.TrmSICoreConnectionFactoryImpl.Bootstrap(Credentials credentials, SICoreConnectionProperties connectionProperties, ClientAttachProperties cap) 
    at IBM.XMS.SIB.Trm.TrmSICoreConnectionFactoryImpl.CreateConnection(Credentials credentials, SICoreConnectionProperties connectionProperties) 
    at IBM.XMS.SIB.Trm.TrmSICoreConnectionFactory.CreateConnection(String username, String password, SICoreConnectionProperties connectionProperties) 
    at IBM.XMS.Impl.ConnectionFactory.CreateConnection(String userName, String password) 
16:43:51.998-------------------------- Sleeping some before consuming more... 
16:44:02.013-------------------------- Connecting... 
Exception : System.InvalidOperationException: UniqueLinkObject no seen on handshake. 
    at IBM.XMS.Formats.MFP.SIB.SchemaManager.SendSchemas(ICommsConnection connection, JMFSchema[] schemas) 
    at IBM.XMS.Formats.MFP.SIB.JsMsgObject.Encode(Object connection) 
FFDC to xmsffdc8416_2013.03.08T10.44.02.013479.txt 
Exception : IBM.XMS.Formats.MFP.MessageEncodeFailedException: Exception of type 'IBM.XMS.Formats.MFP.MessageEncodeFailedException' was thrown. ---> System.InvalidOperationException: UniqueLinkObject no seen on handshake. 
    at IBM.XMS.Formats.MFP.SIB.SchemaManager.SendSchemas(ICommsConnection connection, JMFSchema[] schemas) 
    at IBM.XMS.Formats.MFP.SIB.JsMsgObject.Encode(Object connection) 
    --- End of inner exception stack trace --- 
    at IBM.XMS.Formats.MFP.SIB.JsMsgObject.Encode(Object connection) 
    at IBM.XMS.Formats.MFP.SIB.TrmFirstContactMessageImpl.Encode(Object connection) 
    at IBM.XMS.SIB.Trm.ClientBootstrapHandler.Connect(IClientConnection clientConnection) 
FFDC to xmsffdc8416_2013.03.08T10.44.02.013479.txt 
16:44:02.013-------------------------- IBM.XMS.XMSException: EXCEPTION_RECEIVED_CWSIA0241 
EXCEPTION_RECEIVED_CWSIA0241.explanation 
EXCEPTION_RECEIVED_CWSIA0241.useraction 
    at IBM.XMS.Impl.ConnectionFactory.CreateConnection(String userName, String password) 
    at IBM.XMS.Impl.ConnectionFactory.CreateConnection() 
    at SimpleTest.Program.Main(String[] args) in c:\Users\Administrator\Documents\Visual Studio Projects\TestJMSDequeue\SimpleTest\Program.cs:line 26 

Linked Exception : IBM.XMS.Core.SIResourceException: CWSIT0006E: It is not possible to connect to bus your_bus_name_here because the following bootstrap servers could not be contacted 1.2.3.4:1234:BootstrapBasicMessaging and the following bootstrap servers returned an error condition . See previous messages for the reason for each bootstrap server failure. 
The client cannot connect to the bus. This situation may be due to configuration problems, network problems or it may be that none of the required bootstrap servers or messaging engines are currently available. 
Ensure that the network is working correctly and that the required bootstrap servers and messaging engines are available. ---> IBM.XMS.Core.SIConnectionLostException: Exception of type 'IBM.XMS.Core.SIConnectionLostException' was thrown. 
    at IBM.XMS.SIB.Comms.Client.ClientSideConnection.Connect(ConnectionProperties cp, IClientComponentHandshake cch, SICoreConnectionProperties siProps) 
    at IBM.XMS.SIB.Trm.TrmSICoreConnectionFactoryImpl.Bootstrap(Credentials credentials, SICoreConnectionProperties connectionProperties, ClientAttachProperties cap) 
    --- End of inner exception stack trace --- 
    at IBM.XMS.SIB.Trm.TrmSICoreConnectionFactoryImpl.Bootstrap(Credentials credentials, SICoreConnectionProperties connectionProperties, ClientAttachProperties cap) 
    at IBM.XMS.SIB.Trm.TrmSICoreConnectionFactoryImpl.CreateConnection(Credentials credentials, SICoreConnectionProperties connectionProperties) 
    at IBM.XMS.SIB.Trm.TrmSICoreConnectionFactory.CreateConnection(String username, String password, SICoreConnectionProperties connectionProperties) 
    at IBM.XMS.Impl.ConnectionFactory.CreateConnection(String userName, String password) 
16:44:02.013-------------------------- Sleeping some before consuming more... 

注意,在上面的輸出我拔掉了網後不久,「接收...」並插入它再次16點43分52秒,但之後錯誤繼續,直到我殺了程序。

回答

0

它讀取像ConnectionFactory在網絡再次可用時不會正確重置它的狀態。

我已經在參考手冊上找到了工廠的任何重置功能提示 - 但沒有找到。 但我會試試這個:將GetInstance(...)createConnectionFactory()移出循環,以及SetStringProperty()行。

如果這不起作用,我不明白爲什麼你的客戶不會工作。 你有沒有考慮過,如果這是服務器的問題?你拔下了哪根以太網電纜?連接到客戶端或服務器的那個?如果是服務器,拔出客戶端電纜時是否會發生同樣的問題? 如果你重新啓動程序,它會工作嗎?

+0

重新啓動後,程序會正常連接到隊列。我拔掉了將客戶端連接到網絡的網線。 – Anssssss 2013-03-22 13:39:17

+0

然後,要麼在循環之外移動一些行的建議應該可行 - 或者看起來它很可能是框架中的一個錯誤。 – fredrik 2013-03-22 14:28:03

+0

我試過你的建議(移動循環外部的connectionFactory的創建和初始化)。相同的錯誤條件結果。請注意,如果您擁有IBM的客戶帳戶並且可以創建它,那麼我會接受IBM的錯誤報告作爲足夠的答案。如果沒有解決方法/修復,那麼我將開始研究如何卸載/重新加載XMS DLL(希望這相當於重新啓動應用程序)。 – Anssssss 2013-03-22 14:54:44

0

我知道這是一箇舊帖子,但也許它仍然有幫助。

在創建65.535連接後收到此錯誤。關閉連接/處理對象無關緊要。

我看到以下解決方案:

1。)您可以創建一次連接,並將連接重新用於隊列上的所有操作,直到連接中斷。然後你必須重新連接。 (是的,這是壞的和反對的共同模式,我不會建議這樣做)

2.)有一個版本8.0.0.6可用的錯誤修正。 編輯:APAR#(IJ01244) 我還不知道它何時會包含到未來版本中。 我想你可以聯繫IBM的支持,並參考這個PMR ID來接收IBM.XMS.SIB.dll的更新版本

希望這會有所幫助。

相關問題