

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

# Gunakan batching permintaan otomatis untuk Amazon SQS dengan AWS SDK for Java 2.x
<a name="sqs-auto-batch"></a>

Automatic Request Batching API untuk Amazon SQS adalah pustaka tingkat tinggi yang menyediakan cara efisien untuk mengumpulkan dan menyangga permintaan untuk operasi SQS. Dengan menggunakan API batching, Anda mengurangi jumlah permintaan ke SQS, yang meningkatkan throughput dan meminimalkan biaya. 

Karena metode API batch cocok dengan `[SqsAsyncClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/SqsAsyncClient.html)` metode—`sendMessage`,, `changeMessageVisibility``deleteMessage`, `receiveMessage` —Anda dapat menggunakan API batch sebagai pengganti drop-in dengan sedikit perubahan. 

Topik ini memberi Anda gambaran umum tentang cara mengonfigurasi dan bekerja dengan Automatic Request Batching API untuk Amazon SQS.

## Periksa prasyarat
<a name="sqs-auto-batch-requirements"></a>

Anda perlu menggunakan SDK for Java *2.x versi 2.28.0* atau yang lebih baru untuk memiliki akses ke API batching. Maven Anda setidaknya `pom.xml` harus mengandung elemen-elemen berikut.

```
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>software.amazon.awssdk</groupId>
            <artifactId>bom</artifactId>
            <version>2.28.231</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<dependencies>
    <dependency>
        <groupId>software.amazon.awssdk</groupId>
        <artifactId>sqs</artifactId>
    </dependency>
</dependencies>
```

1 [Versi terbaru](https://central.sonatype.com/artifact/software.amazon.awssdk/bom)

## Buat pengelola batch
<a name="sqs-auto-batch-create"></a>

API batching permintaan otomatis diimplementasikan oleh [SqsAsyncBatchManager](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/SqsAsyncBatchManager.html)antarmuka. Anda dapat membuat contoh manajer beberapa cara.

### Konfigurasi default dengan menggunakan `SqsAsyncClient`
<a name="sqs-batch-manager-create-default"></a>

Cara paling sederhana Anda dapat membuat pengelola batch adalah dengan memanggil metode `batchManager` pabrik pada [SqsAsyncClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/SqsAsyncClient.html)instance yang ada. Pendekatan sederhana ditunjukkan dalam cuplikan berikut. 

```
SqsAsyncClient asyncClient = SqsAsyncClient.create();
SqsAsyncBatchManager sqsAsyncBatchManager = asyncClient.batchManager();
```

Bila Anda menggunakan pendekatan ini, `SqsAsyncBatchManager` instance menggunakan nilai default yang ditampilkan dalam tabel di [Ganti pengaturan konfigurasi untuk `SqsAsyncBatchManager`](#sqs-auto-batch-config-settings) bagian. Selain itu, `SqsAsyncBatchManager` instance menggunakan `SqsAsyncClient` instance dari mana ia dibuat. `ExecutorService`

### Konfigurasi kustom dengan menggunakan `SqsAsyncBatchManager.Builder`
<a name="sqs-batch-manager-create-custom"></a>

Untuk kasus penggunaan yang lebih lanjut, Anda dapat menyesuaikan pengelola batch menggunakan file [https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/SqsAsyncBatchManager.Builder.html](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/SqsAsyncBatchManager.Builder.html). Dengan menggunakan pendekatan ini untuk membuat `SqsAsyncBatchManager` instance, Anda dapat menyempurnakan perilaku batching. Cuplikan berikut menunjukkan contoh cara menggunakan builder untuk menyesuaikan perilaku batching.

```
SqsAsyncBatchManager batchManager = SqsAsyncBatchManager.builder()
    .client(SqsAsyncClient.create())
    .scheduledExecutor(Executors.newScheduledThreadPool(5))
    .overrideConfiguration(b -> b
        .receiveMessageMinWaitDuration(Duration.ofSeconds(10))
        .receiveMessageVisibilityTimeout(Duration.ofSeconds(1))
        .receiveMessageAttributeNames(Collections.singletonList("*"))
        .receiveMessageSystemAttributeNames(Collections.singletonList(MessageSystemAttributeName.ALL)))
    .build();
```

Bila Anda menggunakan pendekatan ini, Anda dapat menyesuaikan pengaturan pada `BatchOverrideConfiguration` objek yang ditunjukkan pada tabel di [Ganti pengaturan konfigurasi untuk `SqsAsyncBatchManager`](#sqs-auto-batch-config-settings) bagian. Anda juga dapat memberikan kustom [https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/ScheduledExecutorService.html](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/ScheduledExecutorService.html)untuk pengelola batch dengan menggunakan pendekatan ini.

## Kirim pesan
<a name="sqs-auto-batch-send"></a>

Untuk mengirim pesan dengan pengelola batch, gunakan `[SqsAsyncBatchManager\$1sendMessage](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/SqsAsyncBatchManager.html#sendMessage(software.amazon.awssdk.services.sqs.model.SendMessageRequest))` metode ini. Buffer SDK meminta dan mengirimkannya sebagai batch saat `sendRequestFrequency` nilai `maxBatchSize` atau tercapai.

Contoh berikut menunjukkan `sendMessage` permintaan segera diikuti oleh permintaan lain. Dalam hal ini, SDK mengirim kedua pesan dalam satu batch.

```
// Sending the first message
CompletableFuture<SendMessageResponse> futureOne = 
    sqsAsyncBatchManager.sendMessage(r -> r.messageBody("One").queueUrl("queue"));

// Sending the second message
CompletableFuture<SendMessageResponse> futureTwo = 
    sqsAsyncBatchManager.sendMessage(r -> r.messageBody("Two").queueUrl("queue"));

// Waiting for both futures to complete and retrieving the responses
SendMessageResponse messageOne = futureOne.join();
SendMessageResponse messageTwo = futureTwo.join();
```

## Mengubah batas waktu visibilitas pesan
<a name="sqs-auto-batch-change-vis"></a>

Anda dapat mengubah batas waktu visibilitas pesan dalam batch dengan menggunakan metode ini [https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/SqsAsyncBatchManager.html#changeMessageVisibility(java.util.function.Consumer)](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/SqsAsyncBatchManager.html#changeMessageVisibility(java.util.function.Consumer)). Buffer SDK meminta dan mengirimkannya sebagai batch saat `sendRequestFrequency` nilai `maxBatchSize` atau tercapai.

Contoh berikut menunjukkan cara memanggil `changeMessageVisibility` metode.

```
CompletableFuture<ChangeMessageVisibilityResponse> futureOne =
    sqsAsyncBatchManager.changeMessageVisibility(r -> 
        r.receiptHandle("receiptHandle")
         .queueUrl("queue"));
ChangeMessageVisibilityResponse response = futureOne.join();
```

## Hapus pesan
<a name="sqs-auto-batch-delete"></a>

Anda dapat menghapus pesan dalam batch menggunakan [https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/SqsAsyncBatchManager.html#deleteMessage(java.util.function.Consumer)](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/SqsAsyncBatchManager.html#deleteMessage(java.util.function.Consumer))metode ini. Buffer SDK meminta dan mengirimkannya sebagai batch saat `sendRequestFrequency` nilai `maxBatchSize` atau tercapai.

Contoh berikut menunjukkan bagaimana Anda dapat memanggil `deleteMessage` metode.

```
CompletableFuture<DeleteMessageResponse> futureOne = 
    sqsAsyncBatchManager.deleteMessage(r -> 
        r.receiptHandle("receiptHandle")
         .queueUrl("queue"));
DeleteMessageResponse response = futureOne.join();
```

## Menerima pesan
<a name="sqs-auto-batch-receive"></a>

### Gunakan pengaturan default
<a name="sqs-auto-batch-receive-default-settings"></a>

Saat Anda melakukan polling `[SqsAsyncBatchManager\$1receiveMessage](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/SqsAsyncBatchManager.html#receiveMessage(java.util.function.Consumer))` metode dalam aplikasi Anda, pengelola batch mengambil pesan dari buffer internalnya, yang diperbarui secara otomatis oleh SDK di latar belakang.

Contoh berikut menunjukkan cara memanggil `receiveMessage` metode.

```
CompletableFuture<ReceiveMessageResponse> responseFuture = 
    sqsAsyncBatchManager.receiveMessage(r -> r.queueUrl("queueUrl"));
```

### Gunakan pengaturan khusus
<a name="sqs-auto-batch-receive-custom-settings"></a>

Jika Anda ingin menyesuaikan permintaan lebih lanjut, misalnya dengan menyetel waktu tunggu khusus dan menentukan jumlah pesan yang akan diambil, Anda dapat menyesuaikan permintaan seperti yang ditunjukkan pada contoh berikut.

```
CompletableFuture<ReceiveMessageResponse> response = 
    sqsAsyncBatchManager.receiveMessage(r -> 
        r.queueUrl("queueUrl")
         .waitTimeSeconds(5)
         .visibilityTimeout(20));
```

**catatan**  
Jika Anda memanggil `receiveMessage` dengan `[ReceiveMessageRequest](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/model/ReceiveMessageRequest.html)` yang menyertakan salah satu parameter berikut, SDK melewati pengelola batch dan mengirimkan permintaan `receiveMessage` asinkron reguler:  
`messageAttributeNames`
`messageSystemAttributeNames`
`messageSystemAttributeNamesWithStrings`
`overrideConfiguration`

## Ganti pengaturan konfigurasi untuk `SqsAsyncBatchManager`
<a name="sqs-auto-batch-config-settings"></a>

Anda dapat menyesuaikan pengaturan berikut saat membuat `SqsAsyncBatchManager` instance. Daftar pengaturan berikut tersedia di [https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/BatchOverrideConfiguration.Builder.html](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/BatchOverrideConfiguration.Builder.html).


| Pengaturan | Deskripsi | Nilai default | 
| --- | --- | --- | 
| maxBatchSize | Jumlah maksimum permintaan per batch untuk masing-masingSendMessageBatchRequest,ChangeMessageVisibilityBatchRequest, atauDeleteMessageBatchRequest. Nilai maksimumnya adalah 10. | 10 | 
| sendRequestFrequency |  Waktu sebelum mengirim batch, kecuali `maxBatchSize` tercapai lebih awal. Nilai yang lebih tinggi dapat mengurangi permintaan tetapi meningkatkan latensi.  | 200ms | 
| receiveMessageVisibilityTimeout | Batas waktu visibilitas untuk pesan. Jika tidak disetel, default antrian digunakan. | Antrian default | 
| receiveMessageMinWaitDuration | Waktu tunggu minimum untuk receiveMessage permintaan. Hindari pengaturan ke 0 untuk mencegah pemborosan CPU. | 50ms | 
| receiveMessageSystemAttributeNames | Daftar [nama atribut sistem](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/model/MessageSystemAttributeName.html) untuk meminta receiveMessage panggilan. | Tidak ada | 
| receiveMessageAttributeNames | Daftar [nama atribut](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-message-metadata.html#sqs-message-attributes) untuk meminta receiveMessage panggilan. | Tidak ada | 