2011-05-26 17 views

答えて

8

Azureキューは、メッセージの順序とメッセージの一意性を保証しません。メッセージは「少なくとも1回」処理されますが、何も確実に2回処理されないので、「最大で1回」を保証するわけではありません。

同じメッセージを2回受信する準備ができているはずです。データの一部としてメッセージの本文にIDを入れることができます。

11

vtortolaかなりそれをカバーしましたが、私はなぜそれが少なくとも1回配信の詳細をもう少し追加したいと思います。

キューアイテムを読み取ると、そのアイテムはキューから削除されません。代わりに、それは見えなくなりますが、キューにとどまります。その不可視期間のデフォルトは30秒(最大2時間)です。その間、アイテムをキューから取り除いたコードは、キューメッセージにあったコマンドを処理してキューアイテムを削除するのに多くの時間を費やします。

タイムアウト時間に達する前にキューアイテムが削除されたとすると、すべて正常です。ただし、タイムアウト時間に達すると、キューアイテムは再び表示され、キューアイテムを保持しているコードはそれを削除しなくなる可能性があります。この場合、他の誰かが同じキューメッセージを読み込み、そのメッセージを再処理することができます。

実際のキューメッセージがタイムアウトすることができ、再表示されますので:

  • あなたのキュー処理が冪等でなければならない - キューメッセージの操作は(レンダリングなどと同じ結果になる必要があります写真のサムネイル)。
  • タイムアウトの調整について考える必要があります。コマンドが有効だが、処理に時間がかかりすぎるかもしれません。(誰かが25MPイメージをアップロードするまで、45秒のサムネイルレンダリングコードがうまくいきました)
  • 正しく処理されないポイズンメッセージについて考える必要があります。例外がスローされるか、メッセージプロセッサが処理を中断させてメッセージを最終的にキューに再表示させる何らかの無効な条件が発生する可能性があります。 DequeueCount - キュー項目を読み込んだときにそのプロパティを表示し、3と同じ場合は、メッセージをテーブルまたはBLOBにプ​​ッシュし、そのメッセージをオフラインでデバッグするために通知を送信することを検討してください。

get-queue低レベルREST APIの詳細はhereです。これにより、Windows Azureキューメッセージ処理の詳細がわかります。

関連する問題