WebSphere MQを使用して、WebSphereを介してクラウド内のデータセンターにデータを送信するアプリケーションがあります。機能の一部は、サーバー側のサブスクライバーがメッセージが30分間受信されなかったことを検出すると、スレッドが5分間一時停止され、接続が切断されることです。再起動すると、再接続します。
実際には、切断してもサブスクリプションは削除されないことがわかりました。再接続しようとすると、次のエラーが表示されます。
「別のメッセージコンシューマーによって使用されているため、サブスクリプションの作成に問題が発生した可能性があります。同じ名前で新しいサブスクリプションを作成する前に、このサブスクリプションを使用しているメッセージコンシューマーが閉じていることを確認してください。詳細については、リンクされた例外を参照してください。 。」
これは、メッセージハンドラがまだ接続されていることを示しています。つまり、切断に失敗しました。XmsClientオブジェクトの切断コード(私の同僚の1人が変更した可能性がありますが、ライブラリの一部)は次のとおりです。
public override void Disconnect()
{
_producer.Close();
_producer.Dispose();
_producer = null;
_consumer.MessageListener = null;
_consumer.Close();
_consumer.Dispose();
_consumer = null;
_sessionRead.Close();
_sessionRead.Dispose();
_sessionRead = null;
_sessionWrite.Close();
_sessionWrite.Dispose();
_sessionWrite = null;
_connection.Stop();
_connection.Close();
_connection.Dispose();
_connection = null;
//GC.Collect();
IsConnected = false;
}
なぜ接続がまだ存在するのかについて誰かが考えていますか?