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'PutEventsazione invia più eventi EventBridge in un'unica richiesta. Per ulteriori informazioni, consulta PutEvents Amazon EventBridge API Reference e put-events nel 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 ciascun 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 voce all'interno di una richiesta ha esito negativo, EventBridge continua a elaborare il resto delle 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, la corrispondenza tra EventBridge eventi non troverà una regola corrispondente e eliminerà l'evento. Sebbene EventBridge invierà una 200 risposta, non darà esito negativo alla 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 AWS CLI
È possibile utilizzare il AWS CLI per inviare eventi personalizzati EventBridge in 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 AWS CLI per leggere le voci di questo file e inviare eventi, al prompt dei comandi, digitare:
aws events put-events --entries file://entries.json
Calcolo della dimensione della voce PutEvents dell'evento
Quando invii eventi personalizzati EventBridge utilizzando l'PutEventsazione, puoi raggruppare fino a 10 voci di eventi in un'unica richiesta di efficienza. La dimensione totale della richiesta, ovvero la somma di tutte le voci relative agli eventi nella richiesta, deve essere inferiore a 1 MB (1.048.576 byte). Questo limite si applica alla richiesta nel suo insieme, non alle singole voci. Un singolo evento può utilizzare fino a 1 MB completo se è l'unica voce della richiesta. È 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'event 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
DetailTypeparametriSourcee sono il numero di byte per le relative forme UTF-8 codificate. -
Se specificato, il
Detailparametro è il numero di byte per la sua UTF-8 forma codificata. -
Se specificato, ogni voce del
Resourcesparametro è il numero di byte per le relative UTF-8 forme codificate.
Il seguente codice Java di esempio calcola le dimensioni di un determinato oggetto PutEventsRequestEntry. Per verificare che il limite di 1 MB non venga violato, è necessario eseguire il calcolo per tutti gli eventi in una richiesta.
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 1 MB (1.048.576 byte), ti consigliamo di caricare l'evento in un bucket Amazon S3 e di includerlo nella voce. Object URL PutEvents