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 接続またはユーザーセッションが作成され、閉じられなかったコード部分に関する情報が含まれます。