20.4. デッド接続の検出


20.4.1. サーバーでデッド接続リソースを閉じる

HornetQ コアまたは JMS クライアントアプリケーションは、終了する前にリソースを閉じる必要があります。アプリケーションのコードで finally ブロックを使用することにより、アプリケーションがリソースを自動的に閉じるよう設定できます。
以下の例は、finally ブロックでセッションとセッションファクトリーを閉じるコアクライアントアプリケーションを示しています。
ServerLocator locator = null;
ClientSessionFactory sf = null;
ClientSession session = null;

try
{
   locator = HornetQClient.createServerLocatorWithoutHA(..);

   sf = locator.createClientSessionFactory();;

   session = sf.createSession(...);
   
   ... do some operations with the session...
}

finally
{
   if (session != null)
   {
      session.close();
   }
   
   if (sf != null)
   {
      sf.close();
   }

   if(locator != null)
   {
      locator.close();
   }
}
以下の例は、finally ブロックでセッションとセッションファクトリーを閉じる JMS クライアントアプリケーションを示しています。
Connection jmsConnection = null;

try
{
   ConnectionFactory jmsConnectionFactory = HornetQJMSClient.createConnectionFactoryWithoutHA(...);

   jmsConnection = jmsConnectionFactory.createConnection();

   ... do some operations with the connection...
}
finally
{
   if (connection != null)
   {
      connection.close();
   }
}
接続 Time to Live (TTL) パラメーターの使用

connection-ttl パラメーターは、クライアントからデータまたは ping パケットを受け取らない場合にサーバーで接続をアライブ状態に維持する期間を決定します。このパラメーターにより、古いセッションなどのデッドサーバーリソースが長く維持され、障害が発生したネットワーク接続が回復した時にクライアントが再接続できるようになります。

HornetQConnectionFactory インスタンスで connection-ttl パラメーターを指定することにより、JMS クライアントに対して接続 TTL を定義できます。JMS 接続ファクトリーインスタンスを JNDI に直接デプロイする場合は、standalone.xml および domain.xml サーバー設定ファイルで connection-ttl パラメーターを定義できます。
connection-ttl パラメーターのデフォルト値は 60000 ミリ秒です。クライアントが独自の接続 TTL を指定する必要がない場合は、サーバー設定ファイルで connection-ttl-override パラメーターを定義してすべての値をオーバーライドできます。connection-ttl-override パラメーターはデフォルトで無効になり、値は -1 になります。
ガベージコレクション

HornetQ は、ガベージコレクションを使用して finally ブロックで明示的に閉じられなかったセッションを検出し、閉じます。HornetQ サーバーはセッションを閉じる前に以下のような警告をログに記録します。

[Finalizer] 20:14:43,244 WARNING [org.hornetq.core.client.impl.DelegatingSession]  I'm closing a ClientSession you left open. Please make sure you close all ClientSessions explicitly before let
ting them go out of scope!
[Finalizer] 20:14:43,244 WARNING [org.hornetq.core.client.impl.DelegatingSession]  The session you didn't close was created here:
java.lang.Exception
   at org.hornetq.core.client.impl.DelegatingSession.<init>(DelegatingSession.java:83)
   at org.acme.yourproject.YourClass (YourClass.java:666)
このログメッセージには、JMS 接続またはユーザーセッションが作成され、閉じられなかったコード部分に関する情報が含まれます。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.