web-dev-qa-db-ja.com

Azure関数とストレージキュー、関数が失敗した場合の対処方法

Azure StorageQueueにメッセージを投稿するシナリオを作成しています。テストの目的で、コンソールアプリを開発しました。このアプリでは、メッセージを受け取り、試行回数で更新できます。ロジックが完了したら、メッセージを削除します。

現在、コードをAzureFunctionに移植しようとしています。非常に異なるように思われることの1つは、Azure関数が呼び出されると、メッセージがキューから削除されることです。

この特定の主題に関するドキュメントを見つけるのは難しいと思います。これら2つを組み合わせるという概念に関して何かが欠けていると感じています。

私の質問:

  1. 新しいキューアイテムで関数をトリガーすると、関数が失敗した場合でも、関数はメッセージを受け取り、キューから削除しますか?
  2. 1が正しければ、メッセージが再試行され、後で処理するためにデッドキューに投稿されることをどのように確認しますか?
11
Oak3

ランタイムは、関数が正常に処理した場合(つまり、エラーが発生しなかった場合)にのみキューメッセージを削除します。メッセージがデキューされて関数に渡されると、一定期間(10分)の間非表示になります。関数の実行中、この不可視性は維持されます。関数が失敗した場合、メッセージは削除されません-非表示の状態でキューに残ります。可視性タイムアウトの期限が切れると、メッセージは再処理のためにキューに再び表示されます。

コアWebJobsSDKキュー処理がどのように機能するかの詳細は、 ここ にあります。そのページで、あなたの質問に対処するセクション「毒メッセージの処理方法」を参照してください。基本的に、すべての正しい動作を無料で取得できます-再試行処理、ポイズンメッセージ処理など:)

27
mathewc