0

2 つのメッセージ駆動型 Bean があります。これらの Bean の 2 つのアクティベーション スペック。1 つのメッセージ バスがあり、両方のアクティベーション スペックがこの 1 つのバスに構成されています。2 つの異なるキューと、その 1 つのメッセージ バス用に構成された 1 つのキュー接続ファクトリがあります。

ここで、キューを決定した後、実行時にキューの 1 つにメッセージを送信するコードを記述します。ただし、両方の MDB が同じメッセージを受け取ります。この構成は一般的にどのように行われますか? 常に 1 つのキュー -> 1 つのキュー接続ファクトリー -> 1 つのメッセージ バス -> 1 つの MDB を構成する必要がありますか? それはすべて一対一の関係ですか?

言い忘れていましたが、私は Websphere Application Server v6.1 を使用しています。

4

4 に答える 4

3

一般に、コンセプトは次のとおりです。

  1. メッセージが宛先 (キュー/トピック) に送信 (キュー)/公開 (トピック) される
  2. ActivationSpec は、特定の宛先 (キュー/トピック) でメッセージをリッスンします。
  3. ActivationSpec : 宛先は 1:1 の関係です
  4. Bean (コンシューマである MDB) は、ActivationSpec をリッスンするように構成されています。

これが意味することは、事実上、bean は、activationSpec によって提供される間接レイヤーを使用して宛先にリンクされるということです。

バスの出番 - SIBus は、これらすべてを可能にするメッセージング インフラストラクチャです。目的地はバスでホストされています。

問題になるのは、ActivationSpec は、メッセージの送信先となるバス上の宛先をリッスンするように構成されているということです。接続ファクトリは、メッセージが送信されるバスを決定します。宛先名が固有で、特定のキュー (JMS キューがバス上の宛先にリンクされている) を対象としている限り、1 つのメッセージは 1 つの ActivationSpec によってのみ受信されます。

バス上にいくつの宛先 (WAS 管理コンソールの SIBus リンクの下) が作成されましたか? 構成が正しいかどうかを確認/検証していただけますか?

「アクティベーション スペックごとに 1 つのバスと、キューごとに 1 つのキュー接続ファクトリですか?」という質問に答えてください。- 答えはノーだ。

  1. バスは、「n」個の宛先をホストできる基盤となるインフラストラクチャです。1 つの ActivationSpec が 1 つの宛先をリッスンします。
  2. With queue connection factory は、キューを作成するためのファクトリ(J2EEファクトリパターン)です。
于 2009-07-09T08:31:48.343 に答える
1

両方のMDBに同じメッセージを受信させたいと言っていると思いますよね?

この場合、MDBはキューではなくトピックをリッスンする必要があります。

あるいは、メッセージを転送するようにIBM MQを構成する方法もあります。たとえば、特定のキューに投稿されたメッセージを他のn個のキューに再投稿できますが、ある種のメッセージの強化が行われる場合にのみ使用されます。再投稿する前に、あなたが達成しようとしていることに対してやり過ぎだと思います。

于 2009-06-23T10:41:10.623 に答える
1

なぜメッセージバスが必要なのですか?

通常、私はMDBをキューに関連付けます。これは1:1の関係です。キューにメッセージを送信すると、リスナーはそれを受け取ります。あなたを買うバスは何ですか?

WebLogicでJMSを実行しましたが、メッセージバスなどの構成は必要ありません。IBMのものだと思います。

これは、SpringでJMSを実行する方法の例です。それが私が続行することをお勧めする方法です。

更新:私はあなたの質問を誤解しました。両方のキューが同じメッセージを受け取っていると言ったとき、それが望ましい動作だとは思いませんでした。もしそうなら、トピックは進むべき正しい方法です。キューはポイントツーポイントメッセージングです。トピックはパブリッシュ/サブスクライブです。

于 2009-06-23T10:42:43.270 に答える
1

あなたの設定は、あなたが思っているように設定されていないと思います。多くの MDB (キューとアクティベーション スペックを含む)、単一のファクトリとメッセージ バスを使用して、説明したのと同じ構成を使用し、すべてが期待どおりに機能します。

両方のキューに同じメッセージを送信するか、キューの代わりにトピックを定義しない限り、表示されている動作を取得することは実際には不可能です。両方の MDB が同じキューから読み取っていたとしても、キューはポイント ツー ポイント メッセージングしかサポートしていないため、メッセージを受け取るのは 1 つだけであると確信しています。あなたが説明したのは、トピックベースの行動です。

于 2009-06-23T13:07:27.877 に答える