第15章 使用済みの接続の検出
この章では、接続 Time-to-Live (TTL) について説明し、HornetQ が、クラッシュしたクライアントおよび終了したクライアントをリソースを正常にクローズせずにどのように扱うかについても説明します。
15.1. サーバーで使用済みの接続リソースをクリーンアップ リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
HornetQ クライアントアプリケーションが終了する前に、そのリソースを
finally ブロックを使用してクローズする必要があります。
例15.1 正常に動作するコアクライアントアプリケーション
以下に、セッションとセッションファクトリーを finally ブロックでクローズする、正常に動作するコアクライアントアプリケーションの例を示します。
例15.2 正常に動作する JMS クライアントアプリケーション
これは、正常に動作する JMS クライアントアプリケーションの例です。
クライアントがクラッシュすると、セッションのようなサーバーサイドリソースはサーバーに残ったままになることがあります。これにより、時間が経つとリソースリークが発生し、サーバーでメモリーや他のリソースが足りなくなることがあります。
残ったクライアントリソースをクリーンアップする要件は HornetQ クライアント接続サポートで満たされます。クライアントとサーバー間のネットワークは失敗し、リブートされることがあり、クライアントは再接続できます。リソースが消去された場合は、リブートが失敗します。
リソースがクライアントのクラッシュ時に消去されるようにするために (リブート時間の間は許可)、
connection TTL は設定可能です。各 ClientSessionFactory は定義された connection TTL を持ちます。TTL は、クライアントから到着するデータが存在しない場合に、サーバーがe接続を保持する時間を決定します。
クライアントは、サーバーがクローズしないよう ping パケットを自動的に送信します。サーバーが接続 TTL 時間の間、接続でパケットを受け取らない場合は、その接続に関連するすべてのセッションがサーバーでクローズされます。
この機能は以下の方法で、クライアントサイドまたはサーバーサイドで設定できます。
- クライアントサイドで、
HornetQConnectionFactoryインスタンス (JBOSS_DIST/jboss-as/server/PROFILE/deploy/jms-ra.rar/META-INF/ra.xml) のConnectionTTL属性を指定します。 - 接続ファクトリーインスタンスが JNDI に直接デプロイされるサーバーサイドで、
JBOSS_DIST/jboss-as/server/PROFILE/deploy/hornetq/hornetq-jms.xmlファイルの<connection-factory>ディレクティブに対してconnection-ttlパラメーターを指定します。
ConnectionTTL のデフォルト値は 60000 (ミリ秒) です。ConnectionTTL 属性の値が -1 の場合は、サーバーサイドでサーバーの接続がタイムアウトしません。
クライアントで独自の接続 TTL を指定することを回避するために、他のすべての値を上書きするグローバル値をサーバーサイドで設定できます。これを行うには、
JBOSS_DIST/jboss-as/server/PROFILE/deploy/hornetq/hornetq-jms.xml ファイルで connection-ttl-override 属性を指定します。connection-ttl-override のデフォルト値は、-1 であり、クライアントは接続 TTL に対して独自の値を設定できます。
15.1.1. クローズに失敗したコアセッションまたは JMS 接続をクローズ リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
すべてのコアクライアントセッションと JMS 接続が終了時に常に
finally ブロックで明示的にクローズされることが重要です。
セッションまたは接続が
finally ブロックでクローズされない場合は、HornetQ がガベージ コレクション時にこれを検出し、ログに次のような警告を記録します (JMS を使用している場合、警告はクライアントセッションではなく JMS 接続に関係します)。
HornetQ は、次に接続/クライアントセッションをクローズします。
ログはクローズされなかった JMS 接続/クライアントセッションが作成されたユーザーコードの行も出力します。これにより、エラーを特定し、適切に修正できるようになります。