私はいくつかのApacheNMSの問題で大変な時間を過ごしています。これの一部は、プラットフォームについての私自身の理解の欠如である可能性があります。
基本的に、STOMPを介してAMQメッセージを送受信するために使用するNMSSTOMPクライアントがあります。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
。さらに、私が本番環境で使用しているフェイルオーバーを使用しても、それらはまったく発生しないことを理解しています。
接続が確立されているかどうかを確実に判断するのを誰かが助けてくれますか?それとも、私が持っているかもしれない誤解を解消しますか?