Mengirim acara dengan PutEvents di Amazon EventBridge - Amazon EventBridge

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Mengirim acara dengan PutEvents di Amazon EventBridge

PutEventsTindakan mengirimkan beberapa peristiwa ke EventBridge dalam satu permintaan. Untuk informasi selengkapnya, lihat PutEvents EventBridge APIReferensi Amazon dan put-events di Referensi AWS CLI Perintah.

Setiap permintaan PutEvents dapat mendukung sejumlah entri yang terbatas. Untuk informasi selengkapnya, lihat EventBridge Kuota Amazon. Operasi PutEvents mencoba untuk memproses semua entri dalam urutan alami permintaan. Setelah Anda meneleponPutEvents, EventBridge berikan setiap peristiwa ID unik.

Contoh kode Java berikut mengirimkan dua peristiwa identik ke 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()); } }

Setelah Anda menjalankan kode ini, hasil PutEvents termasuk array entri respons. Setiap entri dalam array respon sesuai dengan entri dalam array permintaan dalam urutan dari awal sampai akhir permintaan dan respons. Array Entries respons selalu mencakup jumlah entri yang sama sebagai array permintaan.

Menangani kegagalan dengan PutEvents

Secara default, jika entri individu dalam permintaan gagal, EventBridge terus memproses sisa entri dalam permintaan. Array Entries respons dapat mencakup entri yang berhasil dan yang tidak berhasil. Anda harus mendeteksi entri yang tidak berhasil dan menyertakannya ke dalam panggilan berikutnya.

Entri hasil yang berhasil mencakup nilai Id, dan entri hasil yang tidak berhasil mencakup nilai ErrorCode dan ErrorMessage. ErrorCode menguraikan jenis kesalahan.ErrorMessage menyediakan informasi lebih lanjut tentang kesalahan. Contoh berikut ini memiliki tiga entri hasil untuk permintaan PutEvents. Entri kedua tidak berhasil.

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

Jika Anda menggunakan PutEvents untuk mempublikasikan acara ke bus acara yang tidak ada, pencocokan EventBridge acara tidak akan menemukan aturan yang sesuai dan akan membatalkan acara tersebut. Meskipun EventBridge akan mengirim 200 respons, itu tidak akan gagal permintaan atau menyertakan acara dalam FailedEntryCount nilai respons permintaan.

Anda dapat menyertakan entri yang tidak berhasil dalam permintaan PutEvents berikutnya. Pertama, untuk mengetahui apakah ada entri gagal dalam permintaan, periksa parameter FailedRecordCount dalam PutEventsResult. Jika bukan nol, maka Anda dapat menambahkan masing-masing Entryyang memiliki ErrorCode yang bukan null untuk permintaan berikutnya. Contoh berikut ini menunjukkan penangan kegagalan.

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

Mengirim acara menggunakan AWS CLI

Anda dapat menggunakan AWS CLI untuk mengirim acara khusus EventBridge agar dapat diproses. Contoh berikut menempatkan satu acara khusus ke dalam 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\" }"}]'

Anda juga dapat membuat JSON file yang berisi acara khusus.

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

Kemudian, untuk menggunakan AWS CLI untuk membaca entri dari file ini dan mengirim acara, pada prompt perintah, ketik:

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

Menghitung ukuran entri PutEvents acara

Saat Anda mengirim peristiwa khusus untuk EventBridge menggunakan PutEvents tindakan, Anda dapat mengumpulkan beberapa entri peristiwa ke dalam satu permintaan efisiensi. Namun, total ukuran entri harus kurang dari 256KB. Anda dapat menghitung ukuran entri sebelum Anda mengirim peristiwa.

catatan

Batas ukuran dikenakan pada entri. Bahkan jika entri kurang dari batas ukuran, acara di selalu EventBridge lebih besar dari ukuran entri karena karakter dan kunci yang diperlukan dari JSON representasi acara. Untuk informasi selengkapnya, lihat Acara di Amazon EventBridge.

EventBridge menghitung PutEventsRequestEntry ukuran sebagai berikut:

  • Jika ditentukan, parameter Time adalah 14 byte.

  • DetailTypeParameter Source dan adalah jumlah byte untuk bentuk UTF -8 yang dikodekan.

  • Jika ditentukan, Detail parameternya adalah jumlah byte untuk bentuk UTF -8 yang dikodekan.

  • Jika ditentukan, setiap entri Resources parameter adalah jumlah byte untuk bentuk UTF -8 yang dikodekan.

Contoh kode Java berikut ini menghitung ukuran objek PutEventsRequestEntry yang diberikan.

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

Jika ukuran entri lebih besar dari 256KB, kami sarankan untuk mengunggah acara ke bucket Amazon S3 dan menyertakan entri di entri. Object URL PutEvents