2016-07-02 13 views
0

私は約100のトピックでデザインを見ています。セッション、トピック、メッセージコンシューマを作成し、メッセージリスナを消費者に配線すると、多くのリソースが消費されるようです。より良い方法がありますか?たとえば、私のセッションを再利用することができますか、毎回作成する必要がありますか?それとも別のパラダイムを使うべきですか?あなたが各サブスクリプションのために新しいものを作成する必要がありますので、JMSのメッセージコンシューマの大きなリストを作成する効率的な方法はありますか?

 session = conn.createSession(false, Session.CLIENT_ACKNOWLEDGE); 
     final Topic destination = session.createTopic(topicName); 
     final MessageConsumer consumer = session.createConsumer(destination, selector); 
     consumer.setMessageListener(listener); 

答えて

1

JMSセッションはスレッドセーフではありません。ここで

は少なくとも100回呼び出されているロジックです。 ActiveMQのような一部のJMS実装では、複数のトピックに対してサブスクリプションを開始できる仮想トピックをサポートしています。これはおそらくあなたの問題を解決するでしょう。 http://activemq.apache.org/virtual-destinations.htmlを参照してください。

0

同じキューと同じコンシューマセッションを再利用する必要があり、再利用する必要があります。最大100回のセッションを予定しています。

もう1つの解決策として、JMSサーバにセレクタを持つブリッジを使用する方法があります。 100のトピックを1つまたは複数のキューに転送し、そのキューから消費するようにjmsを構成できます。しかし、あなたのメッセージタイプがそれらのトピックですべて異なる場合、実装するのは難しいかもしれません。

希望があれば

関連する問題