2017-03-07 6 views
1

何人かの理由で、私のプロデューサーは同時にXメッセージをウサギMQに送ります。これらのメッセージは、「私は何かを更新して、あなたのものをする」と言う通知です。すべてのメッセージを待ち、コールバックを実行

私の消費者は、すべてのメッセージに対してコールバックを呼び出すのではなく、1つのみ(無期限にすべてのメッセージを待ちません)。それは可能ですか?

答えて

0

これは具体的な内容によって異なりますので、いくつかのシナリオの例を挙げておきます。私は、メッセージがすべて均等に作成されておらず、最後のものが正しいもの(例えば、更新されたデータ)であると仮定します。

  • Xはあなたが得るでしょう知っている、この場合、最初と最後のメッセージは、時間の99%のm秒で、複数回のメッセージを処理することはokです

    間の時間デルタ固定であります1つではなくn個のメッセージなので、新しい(ユニークな)メッセージを受け取るたびにキューに入れ、nを受け取ったときにそれを処理できます。プロセスがm秒以上かかるとすぐに処理します。レイト・メッセージが到着した場合、m秒のタイムアウト後に問題なく再処理されます。

  • Xは可変で、最初と最後のメッセージ間の時間デルタは、m秒の時間< 50%、複数回、前のケースと同じ

    okですメッセージを処理して、あなただけのチューニングする必要がありますメッセージの再処理を十分に遅らせたままメッセージ処理時間を許容する時間を達成するために注意深くタイムアウトしてください。複数回のメッセージを処理

  • がOKでない、タイムアウト後の最後のメッセージには、良いもの

    は私がの最後のメッセージにそれを最後のメッセージを処理するための要件を緩和して作られています時間間隔。 このようにして、メッセージをキューに入れ、許可された時間枠内で最後まで待ってから処理することができます。また、処理されたメッセージのキャッシュを保持して、遅いものが再処理されることなく認識され、破棄されるようにする必要があります。

これらはもちろんより多くの可能性を達成するために組み合わせることができますいくつかのシナリオ、ありますが、最終的にそれはすべてのメッセージが生成され、配信されている方法についての具体的な詳細とメッセージがためになった上で要求に依存処理される。

+0

メッセージはすべて等しい(データなしの通知のみ)、Xは可変です。私はこの解決策を見つけました:メッセージを受け取ったとき、私はこのスレッドで新しいスレッドを開始します。私は他のメッセージを受け取ったときに、スレッドが実行中かどうかを確認します(単純に変数を使用)。 – Charles

関連する問題