私はRabbitMqをより普遍的な方法で使用しようとしています(ただし、必要に応じてこの時点で他のメッセージキューの実装を選択できます)。 Rabbitプッシュメッセージを私の消費者に残す代わりに、消費者はキューに接続し、N個のメッセージのバッチを取り込みます(その間にいくつかの拒否を消費します)。その後、別のキューにジャンプします。これは冗長性のために行われます。一部の消費者がクラッシュすると、すべてのメッセージが他の消費者によって消費されることが保証されます。RabbitMqでロックとバッチフェッチメッセージ
問題は複数のコンシューマがいるため、同じキューで競合したくないということです。キューのロックを保証する方法はありますか?そうでない場合は、少なくとも2人の消費者が同じキューに接続しても同じメッセージを読まないことを確認できますか?トランザクションはある程度助けになるかもしれませんが、RabbitMQから削除されるという話を聞いたことがあります。
その他の建築上の提案も歓迎されています。
ありがとうございます!
編集: コメントに指摘されているように、メッセージをどのように処理する必要があるのかという点には特筆すべき点があります。それらはグループ内でのみ意味をなさないので、関連するメッセージがキューにまとめられている可能性が高いです。たとえば、100個のメッセージのバッチをプルすると、メッセージ1~3,4~5,6~10などで何かできることがあります。もし私がいくつかのメッセージのグループを見つけられなかったらそれらをキューに再送信します。 WorkQueueは、同じグループのメッセージを複数のワーカーに伝播させるため、機能しません。
明らかに消費者は、これは不可能ですが、私は興味があった場合には、[ゴシップ](http://en.wikipedia.org/wiki/Gossip_protocol)のようなものを使用してそれらの間で同期することができます... –