Senden von Ereignissen mit PutEvents in Amazon EventBridge - Amazon EventBridge

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Senden von Ereignissen mit PutEvents in Amazon EventBridge

Die PutEvents Aktion sendet mehrere Ereignisse EventBridge in einer einzigen Anfrage an. Weitere Informationen finden Sie PutEventsin der EventBridge APIAmazon-Referenz und put-events in der AWS CLI Befehlsreferenz.

Jede PutEvents-Anforderung kann eine begrenzte Anzahl von Einträgen unterstützen. Weitere Informationen finden Sie unter EventBridge Amazon-Kontingente. Die PutEvents-Operation versucht, alle Einträge in der natürlichen Reihenfolge der Anforderung zu verarbeiten. EventBridge Weist jedem Ereignis nach dem Anruf PutEvents eine eindeutige ID zu.

Der folgende Java-Beispielcode sendet zwei identische Ereignisse an EventBridge.

AWS 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()); } }
AWS 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()); } }

Nachdem Sie diesen Code ausgeführt haben, enthält das PutEvents-Ergebnis ein Array von Antworteinträgen. Jeder Eintrag im Antwort-Array entspricht einem Eintrag im Anforderungs-Array in der Reihenfolge vom Anfang bis zum Ende der Anforderung und Antwort. Das Antwort-Array Entries enthält stets die gleiche Anzahl Einträge wie in der Anforderung.

Behandlung von Fehlern bei PutEvents

Wenn ein einzelner Eintrag in einer Anfrage fehlschlägt, EventBridge wird standardmäßig die Verarbeitung der restlichen Einträge in der Anforderung fortgesetzt. Ein Antwort-Entries-Array kann sowohl erfolgreiche als auch erfolglose Einträge enthalten. Sie müssen erfolglose Einträge erkennen und sie im nachfolgenden Aufruf aufnehmen.

Erfolgreiche Ergebniseinträge enthalten einen Id-Wert und erfolglose Ergebniseinträge enthalten ErrorCode- und ErrorMessage-Werte. ErrorCode beschreibt die Art des Fehlers. ErrorMessage enthält weitere Informationen über den Fehler. Im folgenden Beispiel gibt es drei Ergebniseinträge für eine PutEvents-Anforderung. Der zweite Eintrag ist erfolglos.

{ "FailedEntryCount": 1, "Entries": [ { "EventId": "11710aed-b79e-4468-a20b-bb3c0c3b4860" }, { "ErrorCode": "InternalFailure", "ErrorMessage": "Internal Service Failure" }, { "EventId": "d804d26a-88db-4b66-9eaf-9a11c708ae82" } ] }
Anmerkung

Wenn Sie früher PutEvents ein Ereignis in einem Event-Bus veröffentlichen, der nicht existiert, wird EventBridge beim Event-Matching keine entsprechende Regel gefunden und das Ereignis wird gelöscht. Es EventBridge wird zwar eine 200 Antwort gesendet, aber die Anfrage wird nicht fehlschlagen oder das Ereignis in den FailedEntryCount Wert der Anforderungsantwort einbeziehen.

Einträge, die erfolglos waren, können Sie in nachfolgenden PutEvents-Anforderungen aufnehmen. Wenn Sie herausfinden möchten, ob die Anforderung fehlerhafte Einträge enthält, überprüfen Sie zunächst den Parameter FailedRecordCount in PutEventsResult. Wenn er nicht Null ist, können Sie jeden Entry, der einen ErrorCode hat, der nicht Null ist, zu einer nachfolgenden Anforderung hinzufügen. Das folgende Beispiel zeigt einen einfachen Ausfall-Handler.

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); }

Senden von Ereignissen mit dem AWS CLI

Sie können das verwenden AWS CLI , um benutzerdefinierte Ereignisse an zu senden, EventBridge damit sie verarbeitet werden können. Im folgenden Beispiel wird ein benutzerdefiniertes Ereignis eingefügt 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\" }"}]'

Sie können auch eine JSON Datei erstellen, die benutzerdefinierte Ereignisse enthält.

[ { "Time": "2016-01-14T01:02:03Z", "Source": "com.mycompany.myapp", "Resources": [ "resource1", "resource2" ], "DetailType": "myDetailType", "Detail": "{ \"key1\": \"value1\", \"key2\": \"value2\" }" } ]

Geben Sie dann AWS CLI an der Befehlszeile Folgendes ein, um die Einträge aus dieser Datei zu lesen und Ereignisse zu senden:

aws events put-events --entries file://entries.json

Die Größe des PutEvents Ereigniseintrags wird berechnet

Wenn Sie benutzerdefinierte Ereignisse an EventBridge die PutEvents Aktion senden, können Sie aus Effizienzgründen mehrere Ereigniseinträge zu einer Anfrage zusammenfassen. Die Gesamtgröße des Eintrags muss jedoch weniger als 256 KB betragen. Sie können die Größe des Eintrags berechnen, bevor Sie die Ereignisse senden.

Anmerkung

Die Größenbeschränkung hängt vom Eintrag ab. Auch wenn der Eintrag die Größenbeschränkung unterschreitet, EventBridge ist das Ereignis in aufgrund der erforderlichen Zeichen und Schlüssel für die JSON Darstellung des Ereignisses immer größer als die Eintragsgröße. Weitere Informationen finden Sie unter Ereignisse bei Amazon EventBridge.

EventBridge berechnet die PutEventsRequestEntry Größe wie folgt:

  • Falls angegeben, misst der Parameter Time 14 Bytes.

  • Die DetailType Parameter Source und geben die Anzahl der Byte für ihre UTF -8-kodierte Form an.

  • Falls angegeben, gibt der Detail Parameter die Anzahl der Byte für die UTF -8-kodierte Form an.

  • Falls angegeben, entspricht jeder Eintrag des Resources Parameters der Anzahl der Byte für seine UTF -8-kodierte Form.

Das folgende Java-Code-Beispiel berechnet die Größe eines bestimmten PutEventsRequestEntry-Objekts.

int getSize(PutEventsRequestEntry entry) { int size = 0; if (entry.getTime() != null) { size += 14; } size += entry.getSource().getBytes(StandardCharsets.UTF_8).length; size += entry.getDetailType().getBytes(StandardCharsets.UTF_8).length; if (entry.getDetail() != null) { size += entry.getDetail().getBytes(StandardCharsets.UTF_8).length; } if (entry.getResources() != null) { for (String resource : entry.getResources()) { if (resource != null) { size += resource.getBytes(StandardCharsets.UTF_8).length; } } } return size; }
Anmerkung

Wenn der Eintrag größer als 256 KB ist, empfehlen wir, das Ereignis in einen Amazon-S3-Bucket hochzuladen und die Object URL in den PutEvents-Eintrag aufzunehmen.