0

JMS の使用方法について質問があります。これが私のケースです:

  • 複数のコンシューマーを含むキューがあります
  • メッセージがキューに送信されます - 「ログイン」メッセージ
  • コンシューマの 1 つがメッセージを処理します

ここで、すべてのシステムに「ログイン」メッセージ、つまりユーザーが正常にログインしたことを伝えたいと思います。現在行っていることは次のとおりです。

  • メッセージを処理したコンシューマーは、「ユーザー x が正常にログインしました」というメッセージを誰もが聞いているトピックにメッセージを送信します。これを成功と呼びましょう。

これで、関連するすべてのシステムは、SUCCESS メッセージにより、「ユーザー x が正常にログインした」ことを認識します。これが私が欲しいものです。

ただし、JMS メッセージ配信ルールを正しく理解していれば、理論的には、別のトピック/キューへのメッセージが、SUCCESS メッセージが受信される前に「ユーザー x ログイン済み」が到着する可能性があることを受信コンシューマーが知っているという事実に依存する可能性があります。SUCCESS メッセージの session.send() 呼び出しの後に送信された場合でも。そうですか?

もしそうなら、JMSでそのようなケースをどのように実装することになっていますか?

どんな助けでも大歓迎です!

4

1 に答える 1

2

そうですか?

残念ながらそうです。

もしそうなら、JMSでそのようなケースをどのように実装することになっていますか?

2つの異なるアプローチが頭に浮かびます:

  • 他のネットワーク プロトコルをシミュレートする - すべてのシステムが SUCCESS メッセージを受信したときに送信する必要がある ACKNOWLEDGE メッセージを追加します。ACKNOWLEDGE メッセージは専用のトピックに送信され、受信側の消費者がユーザー x がログインしていることを知っているという事実に依存するメッセージは、その消費者から ACKNOWLEDGE メッセージが到着するまで送信できません。

  • 同じトピックで SUCCESS とそれ以降のメッセージの両方を送信し (該当する場合。最終的な宛先でない場合、他のコンシューマーはそれ以降のメッセージを無視できます)、SUCCESS メッセージの優先度を高くします。これにより (少なくとも理論的には - JMS API はこれを必要としません!)、受信側のコンシューマーがユーザー x がログインしたことを知っているという事実に依存するメッセージの前に、SUCCESS メッセージが到着したことを保証する必要があります。この場合に関心のあるメソッドはMessageです。 #setJMSPriority

于 2012-11-27T09:14:03.787 に答える