使用 Amazon EventBridge 活动添加 PutEvents - Amazon EventBridge
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

使用 Amazon EventBridge 活动添加 PutEvents

PutEvents操作 EventBridge 在单个请求中向发送多个事件。有关更多信息,请参阅 PutEventsAmazon EventBridge API 参考和Amazon CLI 命令参考中的 put-events

每个 PutEvents 请求可支持有限数目的条目。有关更多信息,请参阅Amazon EventBridge 配额PutEvents 操作将尝试按请求的自然顺序处理所有条目。在您致电后PutEvents,为每个事件 EventBridge 分配一个唯一的 ID。

以下示例 Java 代码向发送了两个相同的事件 EventBridge。

Amazon SDK for Java Version 2.x
EventBridgeClient eventBridgeClient = EventBridgeClient.builder().build(); PutEventsRequestEntry requestEntry = PutEventsRequestEntry.builder() .resources("resource1", "resource2") .source("com.mycompany.myapp") .detailType("myDetailType") .detail("{ \"key1\": \"value1\", \"key2\": \"value2\" }") .build(); List < PutEventsRequestEntry > requestEntries = new ArrayList < PutEventsRequestEntry > (); requestEntries.add(requestEntry); PutEventsRequest eventsRequest = PutEventsRequest.builder() .entries(requestEntries) .build(); PutEventsResponse result = eventBridgeClient.putEvents(eventsRequest); for (PutEventsResultEntry resultEntry: result.entries()) { if (resultEntry.eventId() != null) { System.out.println("Event Id: " + resultEntry.eventId()); } else { System.out.println("PutEvents failed with Error Code: " + resultEntry.errorCode()); } }
Amazon SDK for Java Version 1.0
EventBridgeClient eventBridgeClient = EventBridgeClient.builder().build(); PutEventsRequestEntry requestEntry = new PutEventsRequestEntry() .withTime(new Date()) .withSource("com.mycompany.myapp") .withDetailType("myDetailType") .withResources("resource1", "resource2") .withDetail("{ \"key1\": \"value1\", \"key2\": \"value2\" }"); PutEventsRequest request = new PutEventsRequest() .withEntries(requestEntry, requestEntry); PutEventsResult result = awsEventsClient.putEvents(request); for (PutEventsResultEntry resultEntry : result.getEntries()) { if (resultEntry.getEventId() != null) { System.out.println("Event Id: " + resultEntry.getEventId()); } else { System.out.println("Injection failed with Error Code: " + resultEntry.getErrorCode()); } }

运行此代码后,PutEvents 结果将包含一组响应条目。响应数组中的每个条目对应请求数组中的一个条目,顺序按请求和响应从开始到结束的顺序。响应 Entries 数组包含的条目数量始终与请求数组相同。

使用 PutEvents 处理故障

默认情况下,如果请求中的单个条目失败,则会 EventBridge 继续处理请求中的其余条目。响应 Entries 数组可以包括成功条目和不成功条目。您必须删除不成功的条目,并在后续调用中包括它们。

成功的结果条目包含一个 Id 值,不成功的结果条目包括 ErrorCodeErrorMessage 值。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 参数。如果该参数不为零,则可以将每个具有非空值 ErrorCodeEntry 添加到后续请求中。以下示例展示了一个故障处理程序。

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