

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
<a name="eb-putevents"></a>

`PutEvents`Tindakan mengirimkan beberapa [peristiwa](eb-events.md) ke EventBridge dalam satu permintaan. Untuk informasi selengkapnya, lihat [PutEvents](https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_PutEvents.html)Referensi *Amazon EventBridge API dan [put-events](https://docs.aws.amazon.com/cli/latest/reference/events/put-events.html) di Referensi AWS CLI * *Perintah*.

Setiap permintaan `PutEvents` dapat mendukung sejumlah entri yang terbatas. Untuk informasi selengkapnya, lihat [EventBridge Kuota Amazon](eb-quota.md). Operasi `PutEvents` mencoba untuk memproses semua entri dalam urutan alami permintaan. Setelah Anda menelepon`PutEvents`, 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`
<a name="eb-failure-handling"></a>

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 `Entry`yang 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
<a name="eb-send-events-aws-cli"></a>

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 file JSON yang berisi peristiwa kustom.

```
[
  {
    "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
<a name="eb-putevent-size"></a>

Saat Anda mengirim acara khusus untuk EventBridge menggunakan `PutEvents` tindakan, Anda dapat mengumpulkan hingga 10 entri acara ke dalam satu permintaan efisiensi. Ukuran total permintaan—yaitu, jumlah semua entri acara dalam permintaan—harus kurang dari 1 MB. Batas ini berlaku untuk permintaan secara keseluruhan, bukan untuk entri individu. Satu acara dapat menggunakan hingga 1 MB penuh jika itu adalah satu-satunya entri dalam permintaan. 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 representasi JSON dari acara tersebut. Untuk informasi selengkapnya, lihat [Acara di Amazon EventBridge](eb-events.md).

EventBridge menghitung `PutEventsRequestEntry` ukuran sebagai berikut:
+ Jika ditentukan, parameter `Time` adalah 14 byte.
+ Parameter `Source` dan `DetailType` adalah jumlah byte untuk bentuk terenkodekan UTF-8 mereka.
+ Jika ditentukan, parameter `Detail` adalah jumlah byte untuk bentuk terenkodekan UTF-8-nya.
+ Jika ditentukan, setiap entri parameter `Resources` adalah jumlah byte untuk bentuk terenkodekan UTF-8-nya.

Contoh kode Java berikut ini menghitung ukuran objek `PutEventsRequestEntry` yang diberikan. Untuk memverifikasi batas 1MB tidak dilanggar, Anda perlu melakukan perhitungan untuk semua acara dalam permintaan.

```
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 1MB, kami sarankan untuk mengunggah acara ke bucket Amazon S3 dan menyertakan entri di `Object URL` entri. `PutEvents`