本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
事件重试策略和使用死信队列
有时事件未成功配送至目标在规则. 例如,当目标资源不可用时,可能会发生这种情况EventBridge缺乏对目标资源的权限,或者由于网络状况。当事件由于可恢复错误而无法成功传送到目标时,EventBridge重试发送事件。您可以设置它尝试的时间长度和在重试策略目标的设置。默认情况下,EventBridge在 24 小时内重试发送事件,最多 185 次指数回退和紧张不安
EventBridgeDLQ 是标准的 Amazon SQS 队列,EventBridge用于存储无法成功交付给目标的事件。创建规则并添加目标时,可以选择是否使用 DLQ。配置 DLQ 时,您可以保留任何未成功交付的事件。然后,你可以解决导致事件交付失败的问题并在以后处理事件。
事件错误的处理方式不同。某些事件会被丢弃或发送到 DLQ,而不会尝试任何重试。例如,对于因缺少目标权限或目标资源不再存在而导致的错误,在采取措施解决基本问题之前,所有重试尝试都将失败。而不是重试,EventBridge如果有的话,直接将这些事件发送到 DLQ。
当活动交付失败时,EventBridge向亚马逊发布活动CloudWatch指标表明目标invocation
failed. 如果您使用 DLQ,则会将其他指标发送到CloudWatch包括InvocationsSentToDLQ
和InvocationsFailedToBeSentToDLQ
. 有关 EventBridge 指标的更多信息,请参阅监控 Amazon EventBridge。
以下信息作为 DLQ 消息元数据的一部分发送:
-
规则 ARN
-
目标 ARN
-
错误代码
-
错误消息
-
已用尽的重试条件
-
尝试次数
以下视频介绍了 DLQ 的设置:
使用死信队列的注意事项
在中配置 DLQ 时注意以下事项EventBridge.
-
仅限标准队列支持。你不能在中使用 FIFO 队列作为 DLQEventBridge.
-
EventBridge消息中包括事件元数据和消息属性,包括:错误代码、错误消息、用尽重试条件、规则 ARN、重试尝试次数和目标 ARN。您可以使用这些值来识别事件和失败的原因。
-
对同一账户中的 DLQ 的权限:
-
使用来自不同的 Amazon SQS 队列的权限Amazonaccount.
-
您使用的 Amazon SQS 队列必须位于创建规则的同一区域。
授予死信队列的权限
当您为规则的目标配置 DLQ 时,EventBridge将调用失败的事件发送到选定的 Amazon SQS 队列。要成功将事件传送到队列,EventBridge必须具有执行此操作的权限。当您为规则配置目标并使用EventBridge控制台,权限将自动添加。如果您使用 API 创建规则,或者使用不同的队列Amazon账户,您必须手动创建基于资源的策略,该策略授予所需的权限,然后将其附加到队列。
以下基于资源的策略演示了如何授予EventBridge将事件消息发送到 Amazon SQS 队列。该策略示例授予EventBridge服务权限使用SendMessage
将消息发送到名为” 的队列的操作MyEventDLQ”。队列必须位于 us-west-2 区域Amazon账户 12345676789012。这些区域有:Condition
语句只允许来自名为” 的规则的请求MyTest在中的 us-west-2 区域中创建的规则”Amazon账户 12345676789012。
{ "Sid": "Dead-letter queue permissions", "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sqs:SendMessage", "Resource": "arn:aws:sqs:us-west-2:123456789012:MyEventDLQ", "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:events:us-west-2:123456789012:rule/MyTestRule" } } }
要将策略附加到队列,请使用 Amazon SQS 控制台,打开队列,然后选择访问策略然后编辑策略。您也可以使用Amazon CLI,了解更多信息请参阅Amazon SQS 权限.
如何从死信队列中重新发送事件
您可以通过两种方式将消息移出 DLQ:
-
避免编写 Amazon SQS 使用者逻辑 — 将 DLQ 设置为 Lambda 函数的事件源以耗尽 DLQ。
-
编写 Amazon SQS 消费者逻辑 — 使用 Amazon SQS API,Amazon或者Amazon CLI编写用于轮询、处理和删除 DLQ 中的消息的自定义使用者逻辑。