2

(コンテナなしで)スタンドアロンで実行され、JVMを介して他のモジュールと通信するモジュールがありますJMS。私のモジュールは、あるキューのプロデューサーと別のキューのコンシューマーの両方です。次に、HAの理由とワークロードの理由の両方で、このモジュールをクラスター化する必要があります。エンティティのクラスター化には、おそらくTerracotta+Hibernateを使用します。現在、私のアプリが起動するExecutors.newSingleThreadExecutor()と、コンシューマーとして機能するスレッド(を介して)が起動します(関連性があり、必要な場合は、実際のコードサンプルを添付できます)。

ここで質問を読んで理解したことは、モジュールをN別の場所で起動するとJVMsN別のサブスクライバーが作成さ、キュー内の各メッセージがサブスクライバーに到着するということNです。私がやりたいのは、そのうちの1つだけ(現在、どちらが重要ではないかを言いましょう)にそのメッセージを処理させることです。したがって、実際にNは、一度にメッセージを処理できます。

これはどのように行うことができますか?私は軌道から外れていますか?

ところで、私はOpenMQ実装として使用していますが、それが適切かどうかはわかりません。

助けてくれてありがとう

4

2 に答える 2

1

クラスタ化された環境でのメッセージ処理の典型的なケース。これが私がすることです。

キューの代わりにブロードキャストメッセージ(チャネルベース)を使用します。ポイントツーポイント通信に役立つキューはあまり効果的ではありません。消費者の1人がメッセージを消費するまでメッセージの有効性を設定します。このように、他の消費者はメッセージを見ることさえなく、1人の消費者だけがそれを消費します。

于 2010-08-17T10:21:44.863 に答える
0

JGroupsを見てください。モジュール/サブスクライバーを実装して、必要な種類の同期にjgroupsを使用することを検討してください。JGroupsは、信頼性の高いマルチキャスト通信を提供します。

于 2010-08-17T10:52:24.383 に答える