2

アプリケーションで ActiveMQ 5.8.0 メッセージ グループを使用しようとしていますが、ドキュメントを読んでも期待した結果が得られません。

特定のキューに対して 2 つ (またはそれ以上) のコンシューマーを開始し、メッセージをキューに送信します。プロデューサーの createMessage メソッドでは、次のものを使用しています。

message.setStringProperty("JMSXGroupID", "foo");

GroupID を設定します。テスト目的で、「foo」をハードコーディングしていることに注意してください。最終的には、プロデューサーによって設定された文字列になります。

メッセージに設定されているメッセージ グループは 1 つだけなので、1 つのコンシューマーがアクティブになり、キュー内のすべてのメッセージを消費し、もう 1 つのコンシューマーは静止したままになると予想していました。

代わりに、最初のメッセージが最初のコンシューマーによって処理され、最初のコンシューマーが終了した後に 2 番目のメッセージが 2 番目のコンシューマーによって処理されることがわかります。コンシューマーは、すべてのメッセージが消費されるまで、この方法で交代を続けます。

これは予想される動作ですか、それとも、各 GroupID が単一のコンシューマーに関連付けられるようにするために、ActiveMQ またはプロデューサーまたはコンシューマーのいずれかで行う必要がある追加の構成がありますか?

4

1 に答える 1

2

AMQ メッセージ グループは、一度に 1 つのコンシューマーが特定のグループ (「foo」など) に対してアクティブになることを保証するだけです...そのグループを特定のコンシューマーにバインドしないため、AMQ の内部コンシューマー ロード バランシングはおそらく消費者の間で交互に。

とにかく、複数のコンシューマーなどで動的 JMSXGroupID 値を使用している場合、これは問題になりません。

于 2013-06-03T20:30:49.040 に答える