本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Amazon EventBridge 活动添加 PutEvents
该PutEvents
操作 EventBridge 在单个请求中向发送多个事件。有关更多信息,请参阅 PutEventsAmazon EventBridge API 参考和Amazon CLI 命令参考中的 put-events。
每个 PutEvents
请求可支持有限数目的条目。有关更多信息,请参阅 Amazon EventBridge 配额。PutEvents
操作将尝试按请求的自然顺序处理所有条目。在您致电后PutEvents
,为每个事件 EventBridge 分配一个唯一的 ID。
以下示例 Java 代码向发送了两个相同的事件 EventBridge。
运行此代码后,PutEvents
结果将包含一组响应条目。响应数组中的每个条目对应请求数组中的一个条目,顺序按请求和响应从开始到结束的顺序。响应 Entries
数组包含的条目数量始终与请求数组相同。
使用 PutEvents
处理故障
默认情况下,如果请求中的单个条目失败,则会 EventBridge 继续处理请求中的其余条目。响应 Entries
数组可以包括成功条目和不成功条目。您必须删除不成功的条目,并在后续调用中包括它们。
成功的结果条目包含一个 Id
值,不成功的结果条目包括 ErrorCode
和 ErrorMessage
值。ErrorCode
描述错误的类型。ErrorMessage
提供有关错误的更多信息。以下示例包含 PutEvents
请求的三个结果条目。第二个条目不成功。
{ "FailedEntryCount": 1, "Entries": [ { "EventId": "11710aed-b79e-4468-a20b-bb3c0c3b4860" }, { "ErrorCode": "InternalFailure", "ErrorMessage": "Internal Service Failure" }, { "EventId": "d804d26a-88db-4b66-9eaf-9a11c708ae82" } ] }
注意
如果您使用将事件发布PutEvents
到不存在的事件总线,则 EventBridge 事件匹配将找不到相应的规则,因此会删除该事件。尽管 EventBridge 会发送200
响应,但它不会使请求失败,也不会将事件包含在请求响应的FailedEntryCount
值中。
不成功的条目可包含在后续 PutEvents
请求中。首先,要查找请求中是否存在失败的条目,请检查 PutEventsResult
中的 FailedRecordCount
参数。如果该参数不为零,则可以将每个具有非空值 ErrorCode
的 Entry
添加到后续请求中。以下示例展示了一个故障处理程序。
PutEventsRequestEntry requestEntry = new PutEventsRequestEntry() .withTime(new Date()) .withSource("com.mycompany.myapp") .withDetailType("myDetailType") .withResources("resource1", "resource2") .withDetail("{ \"key1\": \"value1\", \"key2\": \"value2\" }"); List<PutEventsRequestEntry> putEventsRequestEntryList = new ArrayList<>(); for (int i = 0; i < 3; i++) { putEventsRequestEntryList.add(requestEntry); } PutEventsRequest putEventsRequest = new PutEventsRequest(); putEventsRequest.withEntries(putEventsRequestEntryList); PutEventsResult putEventsResult = awsEventsClient.putEvents(putEventsRequest); while (putEventsResult.getFailedEntryCount() > 0) { final List<PutEventsRequestEntry> failedEntriesList = new ArrayList<>(); final List<PutEventsResultEntry> PutEventsResultEntryList = putEventsResult.getEntries(); for (int i = 0; i < PutEventsResultEntryList.size(); i++) { final PutEventsRequestEntry putEventsRequestEntry = putEventsRequestEntryList.get(i); final PutEventsResultEntry putEventsResultEntry = PutEventsResultEntryList.get(i); if (putEventsResultEntry.getErrorCode() != null) { failedEntriesList.add(putEventsRequestEntry); } } putEventsRequestEntryList = failedEntriesList; putEventsRequest.setEntries(putEventsRequestEntryList); putEventsResult = awsEventsClient.putEvents(putEventsRequest); }
使用发送事件 Amazon CLI
您可以使用 Amazon CLI 向发送自定义事件, EventBridge 以便对其进行处理。以下示例将一个自定义事件放入 EventBridge:
aws events put-events \ --entries '[{"Time": "2016-01-14T01:02:03Z", "Source": "com.mycompany.myapp", "Resources": ["resource1", "resource2"], "DetailType": "myDetailType", "Detail": "{ \"key1\": \"value1\", \"key2\": \"value2\" }"}]'
您还可以创建包含自定义事件的 JSON 文件。
[ { "Time": "2016-01-14T01:02:03Z", "Source": "com.mycompany.myapp", "Resources": [ "resource1", "resource2" ], "DetailType": "myDetailType", "Detail": "{ \"key1\": \"value1\", \"key2\": \"value2\" }" } ]
然后,要使用从该 Amazon CLI 文件中读取条目并发送事件,请在命令提示符下键入:
aws events put-events --entries file://
entries.json