2009-06-04 19 views
6

私はJMSを初めて使い、Tomcat 6とSpringでActiveMQを設定しようとしています。私は基本的な事柄のほとんどを設定していますが、私はSpringが提供するMessage Listener Containersとちょっと混乱しています。メッセージリスナーコンテナのように聞こえる文書を読むことは、購読(私はトピックで作業しています)を「処理」し、メッセージを購読解除してリスナーに配信するために使用されます。私はこれについて正しく考えているかどうかはわかりません。この場合、メッセージリスナーコンテナを使用して複数のクラスを同じトピックに登録する方法に関するドキュメントは表示されません。私はあなたがmessageListenerプロパティを設定することができますが、それは1つのクラスがトピックにサブスクライブすることができるようになることがわかります。別のサブスクライバ(Message Driven POJO)に同じトピックを聞かせるために、同じメッセージリスナーコンテナの別のインスタンスを作成するのは間違いです。Spring JMSメッセージリスナーコンテナ

誰でも私のためにこれについていくつかの光を当てることができますか?私は少し混乱するかもしれないと思う。

ありがとうございます!

答えて

0

コンテナは、任意のPOJOをキューまたはトピックからの受信メッセージに「適応」するためのラッパーです。複数のリスナーが必要な場合は、複数のコンテナになります。

4

メッセージ駆動型EJBに精通している場合は、Spring MessageListenerContainerが効果的にMDBを置き換えます。その名前は、JMSトピック/キュー、および単一のJMS MessageListenerと結びつけられており、そのトピック/キューからメッセージを取り出してMessageListenerに送ります。

一度に1つのMessageListenerしか各コンテナに登録できないことは間違いありませんが、MessageListenerContainerコードは非常に複雑ですが、実際は非常に軽量のランタイムコンポーネントです。複数のインスタンスを作成するのを恐れないでください。

また、状況に応じて適切なMessageListener実装を選択してください。シンプルとデフォルトの実装は実際にはかなり異なっていますが、どちらも「より良い」ものではありません。

2

複数のコンテナがあなたを助けてくれるのは間違いありませんが、間違ったアプローチのようです。 JMSの目標は、内部アプリケーションプロセス(複数のクラスについて話している)ではなく、異なるアプリケーション/サービスを統合することです。メッセージリスナーからメッセージを受け取った後、別のクラスにメッセージをプッシュすることをお勧めします。それ以外の場合は、Apache CamelやSpring Integrationなどのフレームワークを参照してください。