除了@JoshCarlisle 的回答和更清楚的事件网格消息传递和重试文档:
死信在重试策略逻辑中启用了一种特殊情况。在死信打开且订阅者因HttpStatusCode.BadRequest失败的情况下,事件网格将停止重试过程并将事件发送到死信端点。此错误代码表明,交付永远不会成功。
以下代码片段显示了死信消息中的一些属性:
"deadLetterReason": "UndeliverableDueToHttpBadRequest",
"deliveryAttempts": 1,
"lastDeliveryOutcome": "BadRequest",
"lastHttpStatusCode": 400,
以下列表显示了事件网格将在重试过程中继续的一些状态代码:
HttpStatusCode.ServiceUnavailable
HttpStatusCode.InternalServerError
HttpStatusCode.RequestTimeout
HttpStatusCode.NotFound
HttpStatusCode.Conflict
HttpStatusCode.Forbidden
HttpStatusCode.Unauthorized
HttpStatusCode.NotImplemented
HttpStatusCode.Gone
一些死信属性的示例,当HttpStatusCode.RequestTimeout时:
"deadLetterReason":"MaxDeliveryAttemptsExceeded",
"deliveryAttempts":3,
"lastDeliveryOutcome":"TimedOut",
"lastHttpStatusCode":408,
现在,您可以看到deadLetterReason属性中描述的上述两种不同情况,例如“ UndeliverableDueToHttpBadRequest ”与“ MaxDeliveryAttemptsExceeded ”
还有一件事:
- 当死信打开时,事件网格不会立即将死信消息传递到死信端点,而是在大约 300 秒之后。我希望这是一个错误,很快就会修复。实际上,如果订阅者失败,例如HttpStatusCode.BadRequest,我们不能等待来自容器存储的事件 5 分钟,它必须是接近实时的事件驱动。