Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Invio di eventi con PutEvents
Amazon EventBridge
L'PutEvents
azione invia più eventi EventBridge in un'unica richiesta. Per ulteriori informazioni, consulta PutEventsAmazon EventBridge API Reference e put-events in AWS CLI Command Reference.
Ogni richiesta PutEvents
può supportare un numero limitato di voci. Per ulteriori informazioni, consulta EventBridge Quote Amazon. L'operazione PutEvents
tenta di elaborare tutte le voci secondo l'ordine naturale della richiesta. Dopo la chiamataPutEvents
, EventBridge assegna a ogni evento un ID univoco.
Il codice Java di esempio seguente invia due eventi identici a EventBridge.
Dopo aver eseguito questo codice, il risultato PutEvents
include un array di voci di risposta. Ogni voce nell'array di risposte corrisponde a una voce nella matrice di richieste secondo l'ordine dall'inizio alla fine della richiesta e della risposta. La matrice di risposta Entries
include sempre lo stesso numero di voci della matrice di richiesta.
Gestione degli errori con PutEvents
Per impostazione predefinita, se una singola immissione all'interno di una richiesta ha esito negativo, EventBridge continua a elaborare le altre voci della richiesta. Un array Entries
di risposte può includere sia le voci riuscite che quelle non riuscite. È necessario rilevare le voci non riuscite e includerle in una chiamata successiva.
Le voci di risultati senza errori includono un valore Id
, mentre le voci di risultati con errori includono i valori ErrorCode
e ErrorMessage
. ErrorCode
descrive il tipo di errore. ErrorMessage
fornisce ulteriori informazioni sull'errore. L'esempio seguente ha tre voci di risultati per una richiesta PutEvents
. La seconda voce non ha esito positivo.
{ "FailedEntryCount": 1, "Entries": [ { "EventId": "11710aed-b79e-4468-a20b-bb3c0c3b4860" }, { "ErrorCode": "InternalFailure", "ErrorMessage": "Internal Service Failure" }, { "EventId": "d804d26a-88db-4b66-9eaf-9a11c708ae82" } ] }
Nota
Se si utilizza PutEvents
per pubblicare un evento su un bus di eventi che non esiste, EventBridge event matching non troverà una regola corrispondente e eliminerà l'evento. Sebbene EventBridge invierà una 200
risposta, non fallirà la richiesta né includerà l'evento nel FailedEntryCount
valore della risposta alla richiesta.
Le voci non riuscite possono essere incluse nelle richieste PutEvents
successive. In primo luogo, per determinare se vi sono voci non riuscite nella richiesta, verifica il parametro FailedRecordCount
in PutEventsResult
. Se è diverso da zero, puoi aggiungere ogni Entry
che ha un ErrorCode
non nullo a una richiesta successiva. L'esempio seguente mostra un semplice gestore di errori.
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); }
Invio di eventi utilizzando il AWS CLI
È possibile utilizzare il AWS CLI per inviare eventi personalizzati in EventBridge modo che possano essere elaborati. L'esempio seguente inserisce un evento personalizzato in 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\" }"}]'
Puoi anche creare un file JSON contenente eventi personalizzati.
[ { "Time": "2016-01-14T01:02:03Z", "Source": "com.mycompany.myapp", "Resources": [ "resource1", "resource2" ], "DetailType": "myDetailType", "Detail": "{ \"key1\": \"value1\", \"key2\": \"value2\" }" } ]
Quindi, per utilizzare il AWS CLI per leggere le voci di questo file e inviare eventi, al prompt dei comandi digitate:
aws events put-events --entries file://
entries.json
Calcolo delle dimensioni di immissione PutEvents degli eventi
Quando invii eventi personalizzati EventBridge utilizzando l'PutEvents
azione, puoi raggruppare più eventi in un'unica richiesta di efficienza. Tuttavia, la dimensione totale delle voci deve essere inferiore a 256 KB. È possibile calcolare la dimensione delle voci prima dell'invio degli eventi.
Nota
Il limite della dimensione viene imposto sulla voce. Anche se la voce è inferiore al limite di dimensione, l'evento in EventBridge è sempre maggiore della dimensione della voce a causa dei caratteri e delle chiavi necessari per la rappresentazione JSON dell'evento. Per ulteriori informazioni, consulta Eventi in Amazon EventBridge.
EventBridge calcola la PutEventsRequestEntry
dimensione come segue:
-
Se specificato, il parametro
Time
è di 14 byte. -
I parametri
Source
eDetailType
sono il numero di byte per i relativi propri moduli con codifica UTF-8. -
Se specificato, il parametro
Detail
è il numero di byte del relativo modulo con codifica UTF-8. -
Se specificato, il parametro
Resources
è il numero di byte dei relativi moduli con codifica UTF-8.
Il seguente codice Java di esempio calcola le dimensioni di un determinato oggetto PutEventsRequestEntry
.
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; }
Nota
Se la dimensione della voce è superiore a 256 KB, consigliamo di caricare l'evento in un bucket di Amazon S3 e di includere Object URL
nella voce PutEvents
.