2016-05-19 5 views
1

私はMessageConsumerの上でリスナーを登録して、受信()メソッドを呼び出すことができるかどうかを疑問に思いました。実用的なシナリオのようには聞こえませんが、知ることは面白いでしょう。 JMS仕様でも同様のことが許可されていますか?はMessageConsumerの上のリスナーをIを登録して、receive()メソッドを呼び出すことができますか? (JMS)

私はSessionがシングルスレッドのコンテキストであり、そのリスナーによるメッセージのディスパッチはシーケンシャルであると知っていますが、実際に登録されたリスナーを処理するスレッドがそれを実行するスレッドがあると思いますJMSプロバイダが作成するスレッド。つまり、メッセージコンシューマを作成したスレッドは別個であり、同時にメッセージを受信することができます。私がちょうど言ったことは正しいのですか?そのシナリオではどうなりますか?私の考えは行くだろう場所を正確に

答えて

1

限り、私はあなたのシナリオでは、JMS仕様で説明されていません知っています。したがって、JMSの実装に任されています。たとえば、メッセージ・リスナーが装着された後、IBM MQ、受信コールの場合にMQRC_HCONN_ASYNC_ACTIVEリターンコードで例外をスローしていました。

1

スレッド問題のあなたの分析があります。私は、1つのセッションと2つのスレッドがやりとりしているために困っていると思います。 OK

は、私は、JMS 1.1仕様でそれを見上げました。私はそれを読むと、2ビットがこれに話します。

  1. 4.5 - 「クライアントは、いずれかの同期消費者のメッセージを受信したり、彼らが到着すると、プロバイダは、非同期的にそれらを届ける必要があります。」 /または両方ではありません。
  2. 4.4.6 - "同じセッションでメッセージを受信するのを待っているコントロールのクライアントスレッドが既に存在する場合、クライアントが制御スレッドを使用してメッセージを同期的に受信しようとするのは間違いです。"私は、メッセージリスナーは、同じセッションですでに受信を待っているもう1つのスレッドだと思います。
関連する問題