HornetQ で次の例外が発生しました (HornetQ 2.2.5 GA と JBoss 4.3.3、InVM コネクタを使用。クライアントとサーバーの両方が同じマシン上にあります)。
hornetq-failure-check-thread,接続障害が検出されました: invm:0 からデータを受信しませんでした。 エラーコードは 3 (HornetQException.CONNECTION_TIMEDOUT) です。
これにより、RemotingServiceImpl.FailureCheckAndFlushThread が実行され、次のログが複数回書き込まれます。
クライアント接続に失敗しました。セッション 95406085-7b3a-11e2-86d3-005056b14e26 のリソースをクリアしています
このアプリケーションでは、ClientSessions を再利用することに注意してください。接続ごとに ClientSession のインスタンスが 1 つあり (クライアントごとに 1 つ、複数の接続を開きます)、上記の問題によりセッションの 1 つが閉じられました。
この投稿を読んだ後:接続タイムアウトの問題 - 接続障害が検出されました
ServerLocator インスタンス (ClientSessions を作成する ClientSessionFactory を作成するために使用されます) で以下を構成する必要があることを理解しました。
ServerLocator locator = HornetQClient.createServerLocatorWithoutHA(connectorConfig);
locator.setClientFailureCheckPeriod(Long.MAX_VALUE);
locator.setConnectionTTL(-1);
この構成で問題が解決し、上記のエラーは再現されませんでした。
私たちの問題は次のとおりです。セッションが別の理由で HornetQ によって再度閉じられる場合、閉じられたセッションの代わりに新しいセッションを作成するにはどうすればよいでしょうか?
これを尋ねているのは、セッションが閉じられたことを確認した後 (および clientFailure と clientTTL の値を設定する前) 、 ClientSessionFactoryインスタンスで createSession(false, true, true)メソッドを呼び出して新しいセッションを作成しようとしたためです (システムの起動時にそのインスタンスを 1 回だけ作成し、それ以降は再開します)、次のエラーで失敗しました:
HornetQException[errorCode=0 message=セッションの作成に失敗しました]
そのため、新しいセッションを作成できず、唯一の解決策は JBoss を再起動することでした。
クライアント サイトでアプリケーションを再起動できないことに注意してください。そのため、古いセッションが何らかの理由で閉じられた場合に備えて、新しいセッションを作成する方法を見つける必要があります。