5

シナリオ: プロデューサーがストレージ キューにメッセージを送信し、Web ジョブが QueueTrigger でメッセージを処理します。各メッセージは 1 回だけ処理する必要があり、複数の Web ジョブ インスタンスが存在する可能性があります。

私はグーグルで調べてきましたが、読んだことから、メッセージが2回処理されないように、メッセージを処理する関数をべき等にする必要があります。また、メッセージのデフォルトのリース時間は 10 分であることも読みました。

私の質問は、ある WebJob インスタンスで QueueTrigger がトリガーされたときに、別の WebJob が同じメッセージを取得できないように、メッセージにリース時間を設定しますか? もしそうなら、メッセージが 2 回処理される可能性を考慮する必要があるのはなぜですか? それとも私はこれを誤解していますか?

4

2 に答える 2

3

プロセスはべき等である必要があります。なぜなら

事実:

  • Web ジョブはメッセージをリースします (他の Web ジョブはメッセージを取得できません)。
  • Web ジョブは、ジョブが完了するとメッセージを削除します。
  • メッセージの処理中に Web ジョブがクラッシュした場合、そのリースはタイムアウトになり、別の Web ジョブがそれを取得して処理を開始します。(メッセージのデフォルトの再試行回数は 5 回で、その後はポイズン キューに送られます)

そのため、Web ジョブがジョブの完了後、メッセージを削除する前にクラッシュした場合、メッセージはしばらくして解放され、同じジョブが再び実行されます。

したがって、プロセスはべき等である必要があります。

于 2016-02-15T14:08:25.857 に答える