1

トピックを指しているMessageListenerContainerが同時に2つ(またはそれ以上)のメッセージを受信するとどうなるか知りたいです。

たとえば、アプリの 2 人のユーザーが同時にパブリッシュをトリガーすると、2 つのjmstemplate呼び出しが同じトピックに 2 つの異なるメッセージを送信します。

コンテナはこれをどのように処理しますか?

  1. コンテナーはMessageListenerAdapter (スレッドセーフとして実装する必要があります) を呼び出す 2 つのスレッドを同時に作成しますか?
  2. または、コンテナーには、 MessageListenerAdapterをシリアル (順次)に呼び出すスレッドが 1 つだけありますか?
4

1 に答える 1

1

同時実行設定は、メッセージを同時に消費するリスナーの数を制御します。トピックに複数のコンシューマーを使用しないでください。そうしないと、同じノードでメッセージが 2 回消費される可能性があります。

<jms:listener-container
  container-type="default"
  connection-factory="connectionFactory"
  acknowledge="auto"
  concurrency="1"     
  cache="consumer">
  <jms:listener destination="TEST.FOO" 
                ref="simpleMessageListener"
                method="onMessage" />
</jms:listener-container>

これも見てください... https://stackoverflow.com/a/5808803/791406

春のドキュメント... http://static.springsource.org/spring/docs/3.0.5.RELEASE/api/org/springframework/jms/listener/DefaultMessageListenerContainer.html

于 2013-06-07T13:39:38.417 に答える