私の消費者は基本的に生産者です。最初のデータセットが取得され、キューに送信されます。消費者は、アイテムを取り、それを処理し、3つの可能性があります、その時点から:ユニークなメッセージをrabbitmqキューに確実に入れることは可能ですか?
- データは良好であり、
- データが不良であるストレージに「良い」キューを入れて
- データを破棄します良いではありません(まだ)または悪い(まだ)ので、データはより小さな部分に分割され、さらに処理するためにキューに戻されます。
私の問題は、キューが非常に迅速に成長し、キューに複製されたパーツにデータが分割され、コンシューマが処理を続ける可能性があるためです無限ループ
私はこれを防止する方法は、重複がキューに入るのを防ぐことだと思います。私はクライアント側でこれを行うことはできません。なぜなら、1時間かけて、数十億のデータポイントを扱うコアがたくさんあるからです(各クライアントがそれをスキャンしてあまりにも遅くなってしまいます)。私はこれをサーバー側で行う必要があると思いますが、前述したようにデータはかなり大きく、効率的に重複がないようにする方法はわかりません。
私は不可能と尋ねているかもしれませんが、私はそれを撃つと思っていました。どんなアイデアでも大歓迎です。
"...its possible that a piece of data is broken down into a part that's
duplicated in the queue and the consumers continue to process it and
end up in a infinite loop."
あなたのキューに入れられた項目の一意であなたが望むすべてを集中することができますが、IMO、あなたの努力を集中すべきところ、上記の問題がある:
私はそれを正確にやろうとしています(私は思っています)。過去のアイテムの重複がないことを保証することによって、同じデータが複数回処理されないことを保証しています。私は単にrabbitmqの実装について確信しています。単純にメッセージIDを送信し、rabbitmqで重複を破棄するか、フィルタを設定する必要がありますか(rabbitmqとはどのように動作しますか)。 –
これを行う方法はありません、AFAIK。ウサギはあなたのメッセージの内容やあなたの待ち行列にあるものを気にしないので、これを世話するのはあなたのアプリケーションに任されます。 –
私のメッセージIDがユニーク(私の実際のデータのハッシュコード)であれば、それらをDBなどに保存し、それに対して質問する必要があります。私はそれを考えていましたが、メッセージサーバーが待機している間にクライアントがいくつかのクエリを実行する必要があります(メッセージサーバー自体にこの作業をプッシュできるかどうかを確認しようとしていました) –