2011-11-09 7 views
1

私は以前のアプリケーションを使ってJBoss MessagingからHornetQへのアップグレードを行っています。このアプリケーションでの使用方法JMS接続を管理します。これはJMSへの私の最初の大規模なエクスポージャー(単純なおもちゃの使用の他に)ですので、現在のイディオムが...正しい、愚かな、または死んだ間違っているかどうか疑問に思っていますか?HornetQを使用したJMS接続/ ConnectionFactoryリファレンス

現在のシステムの動作を示します。

static QueueConnection connection; 
static boolean isConnected; 

static void sendSomeMessage(Object sendMe) { 
    if(!isConnected) connect(); 

} 

static void connect() { 
    // jndi lookup for connection factory 
    connection = factory.createQueueConnection(); 

    // lambdas in java pseudo code, woot! 
    connection.onException => disconnect(); 
    connection.start(); 
    isConnected = true; 
} 

static void disconnect() { 
    connection.close() 
    isConnected = false; 
} 

本の要旨は、接続エラーが最終的に閉じられ、再作成されます接続を発生したときにエラーが発生するまで送信されるすべての単一のメッセージを何度も使用されることです。

私が見てきたすべての例では、常に新しい接続ファクトリとすべてのメッセージ用の新しい接続が作成されますが、これらの例は大きなシステム例ではなく、「ハウツー」例です。

接続ファクトリをキャッシュする必要がある場合、JMS接続への単一の管理参照を許容可能なイディオムにしておきますか?新しいメッセージが出るたびに再作成する必要がありますか?

接続ファクトリを再利用するのは当然ですが、毎回新しい接続を使用してください。

答えて

1

メッセージ・システムは、非同期ことになっている...

だから、あなたはあなたのアプリケーションの全体の生活のためのオープン接続を維持する必要があります。

JMSは現在、作成する必要のあるオブジェクトでは冗長であるため、接続とセッションを作成する必要があります。

だから、これを行う必要があります。

接続= cf.createConnection(...を)。

session = connection.createSession(...);

producer = session.createProducer(...);

セッションとプロデューサは常にスレッド内で使用する必要があります。セッションはスレッドの使用量を表します。 (同期している限り、複数のスレッド内で再利用することができます)

+0

ありがとう、とても役に立ちます! – Michael

関連する問題