4

メッセージを散発的に生成するシステムを使用しており、5 分ごとに 0 または 1 つのメッセージのみを送信したいと考えています。メッセージが生成されない場合、キュー コンシューマによって処理されるものはありません。5 分以内に 100 個の同じメッセージが生成された場合、そのうちの 1 つだけをキューから消費する必要があります。

AMQP(RabbitMQ) を使用していますが、rabbitmq または AMQP プロトコル内でこれを達成する方法はありますか? キューの内容を検査して、重複を挿入しないようにすることはできますか? キューの検査は悪い考えのようであり、通常、メッセージング システムに対して行うべきことではありません。

キュー検査なしで、これらのツールでこれを達成できますか? 頭に浮かぶ唯一の解決策は、すべてのメッセージを取得する 2 つ目のキューを用意し、コンシューマーが各メッセージを読み取って内部キューに入れ、5 分間待機し、受信した重複メッセージを破棄することです。遅延の後、単一のメッセージが「実際の」キューに入れられて処理されます。

これは、キュー システムで処理できる一般的な状況のようです。何か案は?

4

1 に答える 1

2

メッセージ状態の処理は、AMQPが処理しているものではありません。(元の質問で書いたように)AMQおよびプロキシメッセージにも存在するプロセスで状態を処理しようとすることができます。状況に応じて、シーケンスまたはステートレス重複検出のより高度な手段を使用できますが、AMQPはこの特定のユースケースを処理しません。

保証される唯一のことは、複数のバインディングがメッセージと一致し、その後キューに配信される場合、実際には1つのメッセージのみが配信されることです。

于 2009-08-15T11:39:44.453 に答える