

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 重试策略和死信队列
<a name="eb-custom-bus-retry"></a>

当目标调用失败时， EventBridge 会重试直到达到中的`RetryPolicy`两个限制之一，默认为 5 次尝试或 300 秒，然后在 Amazon SQS 队列中写入一条记录。`OnFailureConfiguration.Arn`在创建订阅者时同时设置两者：如果没有死信队列，则会丢弃耗尽重试次数的事件，唯一的跟踪就是指标。`EventsDropped`

## 重试限制
<a name="eb-custom-bus-retry-policy"></a>

以先达到的限制为准，交货停止。


| 限制 | Range | 默认 | 
| --- | --- | --- | 
| MaxRetryAttempts | 0 到 185 | 5 | 
| MaxEventAgeInSeconds | 60 到 86,400 | 300 | 

默认值比自定义事件总线-经典目标的 24 小时和 185 次尝试短。依赖一天重试的迁移设计必须明确设置为 `MaxEventAgeInSeconds` 86,400；否则，在目标中断时间超过 5 分钟期间失败的事件将进入死信队列，而不是延迟交付。对于FIFO订阅者，只要重试，失败的事件就会阻塞其组中较晚的事件，因此较长的重试窗口会用顺序换取延迟。

## 死信记录
<a name="eb-custom-bus-retry-record"></a>

记录是 JSON 文档，而不是事件。以下示例显示了两个事件的一条记录，这些事件在一个批次中一起失败。

```
{
    "version": "1.0",
    "busArn": "arn:aws:events:us-east-1:111122223333:event-busv2/orders/EXAMPLE1234567890abcdef",
    "subscriberArn": "arn:aws:events:us-east-1:111122223333:subscriber/large-orders/EXAMPLEabcdef1234567890",
    "targetArn": "arn:aws:sqs:us-east-1:111122223333:large-orders",
    "errorCode": "ACCESS_DENIED",
    "errorMessage": "The delivery role is not authorized to perform sqs:SendMessage on the target.",
    "exhaustedRetryCondition": "MaximumEventAgeInSeconds",
    "retryAttempts": 4,
    "failedMessages": [
        { "eventId": "a1b2c3d4-...", "eventGroupId": "order-1001", "deduplicationId": null, "timestamp": "2026-09-16T18:40:12Z", "targetRequestId": "..." },
        { "eventId": "e5f6a7b8-...", "eventGroupId": "order-1001", "deduplicationId": null, "timestamp": "2026-09-16T18:40:13Z", "targetRequestId": "..." }
    ]
}
```

到达队列的每一次失败都要先重试：没有传送失败会跳`RetryPolicy`过。 EventBridge 内部的失败会被 EventBridge 无限制地重试，并且永远不会产生记录。下表列出了记录可以携带的代码。 `errorMessage`被截断为 1,024 个字符。


| `errorCode` | 失败了什么 | `errorMessage` | 
| --- | --- | --- | 
| CUSTOMER\_VALIDATION | 目标 API 拒绝了请求（4xx 响应）：值错误、字段缺失、正文格式错误 | 目标 API 自己的消息 | 
| ACCESS\_DENIED | EventBridge 无法担任交付角色，不允许该角色调用目标，或者目标的 Amazon KMS 密钥被拒绝访问 | EventBridge 无法假设{{role}}。检查该角色是否存在，以及其信任策略是否允许 EventBridge 服务主体代入该角色。 或者EventBridge 无法访问{{resource}}。检查它是否存在，以及是否允许订阅者的交付角色访问它。 | 
| RESOURCE\_NOT\_FOUND | 目标或其 Amazon KMS 密钥不存在 | 上面的 “无法访问” 消息，或者一般消息 | 
| INPUT\_TRANSFORMATION\_FAILURE | Transformer或通用目标Input表达式抛出或没有产生任何值 | 表达式错误 | 
| THROTTLING | 目标限制了通话 | 通用消息 | 
| EXECUTION\_TIMEOUT | 目标在内没有回应 InvocationTimeoutSeconds | 通用消息 | 
| REQUEST\_TOO\_LARGE | 请求超出了目标的大小限制；较低 MaxBatchSize | 通用消息 | 
| PARTIAL\_BATCH\_FAILURE | 目标接受了批次中的一部分，拒绝了其余部分；记录中仅failedMessages列出了被拒绝的事件 | 通用消息 | 
| RESOURCE\_CONFLICT | 目标报告了冲突，例如名称已在使用 | 通用消息 | 
| KMS\_INVALID\_STATE | 目标密 Amazon KMS 钥已禁用或待删除 | 通用消息 | 
| SFN\_TYPE\_NOT\_SUPPORTED | REQUEST\_RESPONSE与不支持同步执行的标准状态机一起使用 | 通用消息 | 
| COMPUTE\_EXECUTION\_ERROR | REQUEST\_RESPONSE函数或执行已运行并报告错误 | 通用消息 | 
| INVOCATION\_DEPENDENCY\_INTERNAL | 目标返回服务器错误（5xx 响应） | 通用消息 | 
| LOOP\_DETECTED | 该事件或由其衍生的事件已经通过目标总线；请参阅 [回路检测](eb-custom-bus-target-bus.md#eb-custom-bus-target-bus-loops) | 通用消息 | 
| INTERNAL\_SERVER\_ERROR | 拨打电话 EventBridge 时内部出现故障，但重试次数仍然耗尽 | 通用消息 | 

通用消息是 *“投递失败”。调查时使用此记录的错误代码和请求编号，如果故障仍然存在，请联系 Su Amazon pport。* EventBridge 在传递底层消息可能暴露其他服务的内部结构的地方使用它，因此，对于这些代码，`errorCode`和`targetRequestId`是要处理的事实，以及包含已发送请求的`EVENT_DELIVERY_ATTEMPT`日志记录。与 Amazon SQS 消息属性（`ERROR_CODE`、、、、、`ERROR_MESSAGE``SUBSCRIBER_ARN``TARGET_ARN`、`RETRY_ATTEMPTS`）相同的值到达 `BUS_ARN``EXHAUSTED_RETRY_CONDITION`，因此使用者无需解析正文即可通过这些值进行路由。对于 FIFO 订阅者，使用 FIFO 队列作为死信队列； EventBridge 设置事件`MessageGroupId`中的每条记录`EventGroupId`，这样一个组的记录就会保持井然有序。

交付角色需要`sqs:SendMessage`在队列中。如果没有它，该`OnFailureDestinationFailed`指标就会计算每条无法写入的记录，这些事件就会丢失。

## 从死信队列中重新驱动事件
<a name="eb-custom-bus-retry-redrive"></a>

队列中保存的是记录，而不是事件，因此您可以通过重播公交车上的事件来重新驾驶。事件必须仍在公交车的保留期内。

1. 阅读记录并收集所有记录`failedMessages[].eventId`，以及最早和最新的记录`timestamp`。

1. 修复`errorCode`名称的原因：角色的策略、目标或表达式。

1. 在同一条总线上创建一个具有相同目标和角色的订阅者，`POINT_IN_TIME`起始位置`StartingPoint`为最早的时间戳`EndPoint`且最新，并对标识符进行`SYSTEM_METADATA`过滤。

1. 订阅者交付事件后，将其删除并从队列中删除记录。

```
aws eventsv2 create-subscriber \
    --name redrive-2026-09-16 \
    --event-bus-arn arn:aws:events:us-east-1:111122223333:event-busv2/orders/EXAMPLE1234567890abcdef \
    --starting-position POINT_IN_TIME \
    --point-in-time-configuration '{ "PointType": "TIMESTAMP", "StartingPoint": "2026-09-16T18:40:00Z", "EndPoint": "2026-09-16T18:41:00Z" }' \
    --filter-configuration '{ "Filters": [ { "Scope": "SYSTEM_METADATA", "Pattern": "{\"aws:EventId\":[\"a1b2c3d4-...\",\"e5f6a7b8-...\"]}" } ] }' \
    --invoke-configuration '{ "TargetArn": "arn:aws:sqs:us-east-1:111122223333:large-orders", "RoleArn": "arn:aws:iam::111122223333:role/EventBusDeliveryRole" }'
```

重播的事件随之而来 `aws:DeliveryType``REPLAY`，因此消费者可以从实时流量中分辨出来。