2017-10-01 5 views
-1

ActiveMQ(5.14.5)を使用しています。 1つのプロデューサと複数のコンシューマが同じキューにあります。 時々、JMSXGroupIDを設定して複数のメッセージをグループ化し、単一のコンシューマで消費します。これは期待どおりに動作します。並行 は、プロデューサは、非グループ化されたメッセージを送信し続ける(即ちJMSXGroupIDなし)ActiveMQ:特定のメッセージグループを処理するように選択されたグループ化されていないメッセージを受信しないコンシューマ

問題: 我々は、消費者が特定のグループを処理するために選択された後、それはもはや非グループ化されたメッセージを取得していないことに気づきました。たとえそれが完全にアイドル状態であっても。グループ化されていないメッセージは、常に他のコンシューマに送信されます。 グループ化されていないメッセージは、グループに割り当てられたグループを閉じた後でのみ消費されます(JMSXGroupSeq = -1を設定して)。

これは正常な動作ですか?私たちは、グループ化されていないメッセージは、いつものようにすべての消費者に同じラウンドロビン方式で引き続き配信されると予想していました。 ActiveMQのドキュメントでこれを明確に参照することができませんでした。

答えて

0

ここでメッセージブローカーには勝てない状況があります。再生中のアクティブなメッセージグループが存在する場合、ブローカは、それらのグループに属するさらなるメッセージが生成されると想定しなければならない。そのため、特定のグループにバインドされたメッセージコンシューマは、グループ化されていないメッセージではなく、そのグループの後のメッセージで利用できるようにする必要があります。結局、グループ化されていないメッセージを別の場所で扱うことができますが、グループ化されたメッセージは処理できません。

しかし、コンシューマ間のメッセージの均等分配も望みます。したがって、グループにバインドされている消費者は、アイドル時に何らかの作業を行うことができます。

しかし、それがアイドル状態であることをどのように知っていますか?コンシューマがグループ化されていないメッセージを集め(デフォルトのプリフェッチの動作を忘れないで)、特定のグループに一致する新しいメッセージが到着した場合はどうなりますか?

"グループ消費者"をデフォルトの動作に戻すという事実は、これはバグではなく、厄介な状況で合理的な妥協をする意図的な試みであることを示唆しています。 「グループ消費者」がグループ化されていないワークロードに参加できる機能を追加することを頼むのは妥当だと思うが、それを強化として見る傾向があるだろう。

もちろん私の$ 0.02です。

関連する問題