我有些時間處理Apache NMS問題。部分原因可能是我自己對平臺的理解不夠。Apache NMS - 如何確定連接是否已經啓動
本質上,我有一個NMS STOMP客戶端,我用它通過STOMP發送和接收AMQ消息。該API看起來有點像這樣:
internal sealed class NMSStompClient : IDisposable
{
public bool IsConnected { get; }
public void Connect(Uri uri, string userId, string password, TimeSpan timeout);
public void Disconnect();
public void Send(IDestination destination, IDestination replyDestination, long sessionId, int correlationId, byte[] messageBytes, TimeSpan timeout);
public IDisposable Subscribe(IDestination destination, Action<IMessage> messageHandler, Action<IMessage, Exception> errorHandler);
}
我試圖讓我的集成測試一致通過,但是當我增加AMQ是下來(通行證爲10秒的時間量,他們總是失敗,在60失敗)。難以忍受的調試和跟蹤的數量後,我發現,這個問題似乎從我的IsConnected
實施遏制(或者,至少,這是問題的一部分):
public bool IsConnected
{
// connection is Apache.NMS.IConnection
// session is Apache.NMS.Stomp.Session
get { return this.connection != null && this.connection.IsStarted && this.session != null && this.session.Connection == this.connection; }
}
我來到這個實現通過試驗和錯誤。我根本找不到一個簡單的方法來確定連接是否「啓動」。沒有我可以在IConnection
或Session
找到的財產,這將告訴我這一點。
我知道ConnectionInterruptedListener
,ConnectionResumedListener
和ExceptionListener
事件,但在我的集成測試中唯一發生的事件是ExceptionListener
。而且,據我所知,在使用我正在生產的故障轉移時,他們根本沒有提出任何問題。
任何人都可以幫助我可靠地確定連接是否啓動?或者也許清除我可能有的任何誤解?
謝謝。我需要了解連接問題的原因有兩個:1.向用戶提供反饋。 2. AMQ恢復後,重新建立我們在AMQ上運行的基礎架構。不幸的是,一旦AMQ恢復正常,故障轉移不足以確保基礎架構重新建立。 – 2012-02-27 09:51:35
ConnectionInterruptedListener和ConnectionResumedListener將在連接丟失時調用,隨後在使用故障轉移時恢復。 – 2012-02-28 15:04:58