2

複数のコンシューマーを持つ Java のプロデューサー/コンシューマー モデルがあります。変数を持つプロデューサーとコンシューマーの間でオブジェクトを渡しています。それを「名前」と呼びましょう。

現在、この名前は A、B、または C のいずれかです。値が A の場合、1 つのコンシューマーがそれをキューから取り出し、それを使用して何かを行います。値が B の場合、別のコンシューマーが同じキューから取り出して、別のことを行います。値が C の場合、3 番目のコンシューマーが同じことを行います。

私の質問は、これをどのように実装するかです。私の現在の理論は次のとおりです(疑似コードで):

// This is code for each consumer
pull item off the queue
check if item.name is right for this consumer (A, B, or C)
if so, send it to consume()
else, put it back on the queue

このようなものはうまくいきますか、それとも私のスレッド同期に大混乱をもたらしますか? うまくいかない場合、これを実装するにはどのモデルを使用すればよいですか?

4

1 に答える 1

0

最も簡単な方法は、メッセージの発行時にメッセージ ヘッダーを定義することです。次に、特定のメッセージ ヘッダーを探す一意の MessageSelector を持つ複数のコンシューマーをそれぞれ持つことができます。このように、正しいコンシューマのみがメッセージを取得し、間違ったコンシューマがメッセージを取得した場合にメッセージを再投稿することを心配する必要はありません (これは非常に非効率的であり、多くのメッセージが機能するロードされたシステムでは適切ではありません)システムを通じて)。

http://docs.oracle.com/javaee/1.3/jms/tutorial/1_3_1-fcs/doc/prog_model.html

于 2013-02-25T02:27:02.667 に答える