10

JMS 接続/セッション/コンシューマーを常にオープンにしておくことは悪い習慣ですか?

コード ドラフトの例:

// app startup code

ConnectionFactory cf = (ConnectionFactory)jndiContext.lookup(CF_JNDI_NAME);
Connection connection = cf.createConnection(user,pass);
Session session = connection.createSession(true,Session.TRANSACTIONAL);
MessageConsumer consumer = session.createConsumer(new Queue(queueName));
consumer.setMessageListener(new MyListener()); 
connection.start();
connection.setExceptionListener(new MyExceptionHandler()); // handle connection error


// ... Message are processed on MyListener asynchronously ...


// app shutdown code

consumer.close();
session.close();
connection.close();

この JMS 使用パターンを改善するための提案はありますか?

4

5 に答える 5

8

同意した。接続/セッション/プロデューサー/コンシューマーを維持することを含む、 JMS を効率的に使用する方法に関するいくつかの良いヒントを次に示します。

パフォーマンスを最大化することに関心がある場合は、トランザクションの使用に関する推奨事項も確認することをお勧めします。

于 2008-11-10T10:51:29.843 に答える
6

これは、長期間の接続を扱う場合に非常に一般的で受け入れられる方法です。実際、多くの JMS サーバーでは、必要になるたびに新しい接続を作成するよりも望ましい方法です。

于 2008-11-08T02:01:56.653 に答える
5

接続/セッション/プロデューサー/コンシューマーを長時間開いたままにするかどうかの選択は、プロデューサー/コンシューマーがメッセージを送受信する頻度に基づく必要があります。

プロデューサーが頻繁にメッセージを送信したり、コンシューマーがメッセージを受信したりする場合は、接続/セッション/プロデューサー/コンシューマーを開いたままにしておく必要があります。一方、メッセージの送受信が頻繁でない場合は、これらの JMS オブジェクトを開いたままにしておくと、ソケットなどのシステム リソースが消費されるので好ましくありません。

于 2012-05-30T03:42:38.030 に答える
4

私たちのアプリでは、接続/セッション/コンシューマー/プロデューサーを一度に何ヶ月も開いています。これを確実に機能させるには、ベンダー (BEA) と協力する必要がありました。しかし、それに関する問題は、ベンダーが修正する必要があるバグです。

于 2008-11-10T21:46:24.033 に答える
2

参考までに、閉じた接続 ( javax.jms.Connection )のセッション、プロデューサー、およびコンシューマーを閉じる必要はありません。リソースを解放するには、次のコードで十分です。

try { 
        this.connection.close();
    } catch (JMSException e) {
        //
    }
于 2016-10-24T11:34:01.867 に答える