2

私のJavaSwingアプリケーションでは、jmsサーバーと通信するjmsクライアントを実装しました。これは正常に機能します。

現在、アプリケーションの起動時に、接続とセッションを作成します。

ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory
connection = connectionFactory.createConnection();
connection.start();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

次に、トピックにメッセージを送信する必要がある場合は、トピック(メッセージの送信先)、一時キュー(返信の受信用)、プロデューサー(メッセージの送信用)、コンシューマー(返信の実際の読み取り用)を作成します。 :

Destination destination = session.createTopic ...
MessageProducer producer = session.createProducer ...
Destination tempDest = session.createTemporaryQueue(); 
MessageConsumer responseConsumer = session.createConsumer(tempDest);
producer.send(msg);

この場合のベストプラクティスは何でしょうか。

メッセージを送信する必要があるときにすべてを簡単に作成できますか、または宛先、MessageProducer、MessageConsumerをどこかに保存して再利用する方がよい場合があります。オブジェクトを再利用することにしたときに注意する必要がある特別なことはありますか?

4

1 に答える 1

3

再利用できるオブジェクトを再利用する必要があります。

接続はスレッドセーフであるため、アプリケーション全体で再利用される可能性があります。

セッションオブジェクトはスレッドセーフではないため、その場合はスレッドごとのセッションに固執する必要があります。

あなたはごまかすことができます。を使用するorg.apache.activemq.pool.PooledConnectionFactoryと、セッション、接続、およびプロデューサーのプールがセットアップされます。

あなたはまだ書く必要がありますconnection.createSession(..session.close()しかしそれはただプールからオブジェクトを取り、解放するだけです。

並行性をきめ細かく制御できる場合は、オブジェクトを実際に再利用する方が簡単な場合がありますが、これはめったにありません。

于 2013-02-08T14:27:38.133 に答える