Event Grid によるメッセージの配信と再試行Event Grid message delivery and retry

この記事では、配信が確認されないときに Azure Event Grid がイベントをどのように処理するかについて説明します。This article describes how Azure Event Grid handles events when delivery isn't acknowledged.

Event Grid は、持続性のある配信を提供します。Event Grid provides durable delivery. 各サブスクリプションに対して、最低 1 回は各メッセージを配信します。It delivers each message at least once for each subscription. イベントは、直ちに各サブスクリプションの登録済みのエンドポイントに送信されます。Events are sent to the registered endpoint of each subscription immediately. エンドポイントがイベントの受信を確認しない場合、Event Grid はイベントの配信を再試行します。If an endpoint doesn't acknowledge receipt of an event, Event Grid retries delivery of the event.

現時点では、Event Grid はサブスクライバーへ各イベントを個別に送信します。Currently, Event Grid sends each event individually to subscribers. サブスクライバーは、イベント 1 つが格納された配列を受け取ります。The subscriber receives an array with a single event.

再試行のスケジュールと期間Retry schedule and duration

Event Grid は、メッセージの配信後、応答を 30 秒間待機します。Event Grid waits 30 seconds for a response after delivering a message. 30 秒経過しても、エンドポイントが応答していない場合は、メッセージは再試行のためにキューに入れられます。After 30 seconds, if the endpoint hasn’t responded, the message is queued for retry. Event Grid は、イベント配信に対して指数バックオフ再試行ポリシーを使用します。Event Grid uses an exponential backoff retry policy for event delivery. Event Grid ではベスト エフォート方式で次のスケジュールに従って配信を再試行します。Event Grid retries delivery on the following schedule on a best effort basis:

  • 10 秒10 seconds
  • 30 秒30 seconds
  • 1 分1 minute
  • 5 分5 minutes
  • 10 分10 minutes
  • 30 分30 minutes
  • 1 時間1 hour
  • 最大24 時間で、1時間ごとHourly for up to 24 hours

エンドポイントが 3 分以内に応答した場合、Event Grid はベスト エフォート方式でイベントを再試行キューから削除しようとしますが、それでも重複が受信される可能性があります。If the endpoint responds within 3 minutes, Event Grid will attempt to remove the event from the retry queue on a best effort basis but duplicates may still be received.

Event Grid では、すべての再試行の手順に小規模なランダム化を追加します。また、エンドポイントが一貫して正常ではない、長期間ダウンしている、または圧迫されていることがわかっている場合は、状況に応じて、特定の再試行をスキップできます。Event Grid adds a small randomization to all retry steps and may opportunistically skip certain retries if an endpoint is consistently unhealthy, down for a long period, or appears to be overwhelmed.

決定論的な動作の場合は、サブスクリプション再試行ポリシーの中で有効なイベント タイムと最大配信試行回数を設定します。For deterministic behavior, set the event time to live and max delivery attempts in the subscription retry policies.

Event Grid では、既定で 24 時間内に配信されないすべてのイベントが有効期限切れになります。By default, Event Grid expires all events that aren't delivered within 24 hours. イベント サブスクリプションの作成時には、再試行ポリシーをカスタマイズすることができます。You can customize the retry policy when creating an event subscription. 配信の最大試行回数 (既定値は 30) と、イベントの有効期限 (既定値は 1,440 分) を指定します。You provide the maximum number of delivery attempts (default is 30) and the event time-to-live (default is 1440 minutes).

配信不能イベントDead-letter events

Event Grid がイベントを配信できない場合は、配信不能イベントをストレージ アカウントに送信できます。When Event Grid can't deliver an event, it can send the undelivered event to a storage account. このプロセスは配信不能処理と呼ばれます。This process is known as dead-lettering. 既定では、Event Grid は配信不能処理を有効にしません。By default, Event Grid doesn't turn on dead-lettering. この処理を有効にするには、イベント サブスクリプションの作成時に、配信不能イベントを保持するようにストレージ アカウントを指定する必要があります。To enable it, you must specify a storage account to hold undelivered events when creating the event subscription. このストレージ アカウントからイベントをプルして配信を解決します。You pull events from this storage account to resolve deliveries.

Event Grid は、そのすべての再試行を試行し終わると、配信不能の場所にイベントを送信します。Event Grid sends an event to the dead-letter location when it has tried all of its retry attempts. Event Grid は、400 (正しくない要求) または 413 (要求のエンティティが大きすぎます) の応答コードを受信した場合、直ちにそのイベントを配信不能エンドポイントに送信します。If Event Grid receives a 400 (Bad Request) or 413 (Request Entity Too Large) response code, it immediately sends the event to the dead-letter endpoint. これらの応答コードは、イベントの配信が決して成功しないことを示します。These response codes indicate delivery of the event will never succeed.

イベントの配信を最後に試してから配信不能メッセージがその宛先に届くまで、5 分間の遅延があります。There is a five-minute delay between the last attempt to deliver an event and when it is delivered to the dead-letter location. この遅延の目的は、BLOB ストレージの操作数を減らすことにあります。This delay is intended to reduce the number Blob storage operations. 配信不能の場所が 4 時間にわたって使用できない場合、そのイベントは破棄されます。If the dead-letter location is unavailable for four hours, the event is dropped.

配信不能の場所を設定するには、コンテナーを含むストレージ アカウントが必要です。Before setting the dead-letter location, you must have a storage account with a container. イベント サブスクリプションの作成時に、このコンテナーのエンドポイントを指定します。You provide the endpoint for this container when creating the event subscription. エンドポイントの形式は次のとおりです。/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Storage/storageAccounts/<storage-name>/blobServices/default/containers/<container-name>The endpoint is in the format of: /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Storage/storageAccounts/<storage-name>/blobServices/default/containers/<container-name>

イベントが配信不能の場所に送信されたら通知を受け取るようにすることもできます。You might want to be notified when an event has been sent to the dead letter location. Event Grid を使用して配信不能イベントに応答するには、配信不能 Blob ストレージ用のイベント サブスクリプションを作成します。To use Event Grid to respond to undelivered events, create an event subscription for the dead-letter blob storage. 配信不能 Blob ストレージが配信不能イベントを受信するたびに、Event Grid はハンドラーに通知します。Every time your dead-letter blob storage receives an undelivered event, Event Grid notifies your handler. ハンドラーは、配信不能イベントを調整するためのアクションで応答します。The handler responds with actions you wish to take for reconciling undelivered events.

配信不能の場所の設定の例については、「配信不能と再試行に関する方針」を参照してください。For an example of setting up a dead letter location, see Dead letter and retry policies.

メッセージの配信状態Message delivery status

Event Grid は、HTTP 応答コードを使用してイベントの受信を確認します。Event Grid uses HTTP response codes to acknowledge receipt of events.

成功コードSuccess codes

次の HTTP 応答コードは、イベントが Webhook に正常に配信されていることを示します。The following HTTP response codes indicate that an event has been delivered successfully to your webhook. Event Grid は、配信が完了したとみなします。Event Grid considers delivery complete.

  • 200 OK200 OK
  • 202 受理されました202 Accepted

エラー コードFailure codes

次の HTTP 応答コードは、イベントの配信が失敗したことを示します。The following HTTP response codes indicate that an event delivery attempt failed.

  • 400 Bad Request400 Bad Request
  • 401 権限がありません401 Unauthorized
  • 404 見つかりません404 Not Found
  • 408 要求がタイムアウトしました408 Request timeout
  • 413 要求のエンティティが大きすぎます413 Request Entity Too Large
  • 414 URI が長すぎます414 URI Too Long
  • 429 Too Many Requests429 Too Many Requests
  • 500 内部サーバー エラー500 Internal Server Error
  • 503 サービス利用不可503 Service Unavailable
  • 504 ゲートウェイ タイムアウト504 Gateway Timeout

次の手順Next steps