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
Batching Permintaan Otomatis API untuk Amazon SQS adalah pustaka tingkat tinggi yang menyediakan cara efisien untuk mengumpulkan dan menyangga permintaan untuk operasi. SQS Dengan menggunakan batchingAPI, Anda mengurangi jumlah permintaanSQS, yang meningkatkan throughput dan meminimalkan biaya.
Karena API metode batch cocok dengan SqsAsyncClient
metode—sendMessage
,, changeMessageVisibility
deleteMessage
, receiveMessage
—Anda dapat menggunakan batch API sebagai pengganti drop-in dengan sedikit perubahan.
Topik ini memberi Anda gambaran umum tentang cara mengonfigurasi dan bekerja dengan Batching Permintaan Otomatis API untuk AmazonSQS.
Periksa prasyarat
Anda perlu menggunakan versi 2.28.0 atau yang lebih baru SDK untuk Java 2.x untuk memiliki akses ke batching. API 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>
Buat pengelola batch
Batching permintaan otomatis API diimplementasikan oleh SqsAsyncBatchManager
1. Konfigurasi default dengan menggunakan SqsAsyncClient
Cara paling sederhana Anda dapat membuat pengelola batch adalah dengan memanggil metode batchManager
pabrik pada SqsAsyncClient
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 bagian. Selain itu, SqsAsyncBatchManager
instance menggunakan SqsAsyncClient
instance dari mana ia dibuat. ExecutorService
1. Konfigurasi kustom dengan menggunakan SqsAsyncBatchManager.Builder
Untuk kasus penggunaan yang lebih lanjut, Anda dapat menyesuaikan pengelola batch menggunakan file SqsAsyncBatchManager.Builder
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 bagian. Anda juga dapat memberikan kustom ScheduledExecutorService
Kirim pesan
Untuk mengirim pesan dengan pengelola batch, gunakan SqsAsyncBatchManager#sendMessage
metode ini. SDKBuffer 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
Anda dapat mengubah batas waktu visibilitas pesan dalam batch dengan menggunakan metode ini SqsAsyncBatchManager#changeMessageVisibility
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
Anda dapat menghapus pesan dalam batch menggunakan SqsAsyncBatchManager#deleteMessage
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
Gunakan pengaturan default
Saat Anda melakukan polling SqsAsyncBatchManager#receiveMessage
metode dalam aplikasi Anda, pengelola batch mengambil pesan dari buffer internalnya, yang diperbarui SDK secara otomatis di latar belakang.
Contoh berikut menunjukkan cara memanggil receiveMessage
metode.
CompletableFuture<ReceiveMessageResponse> responseFuture = sqsAsyncBatchManager.receiveMessage(r -> r.queueUrl("queueUrl"));
Gunakan pengaturan khusus
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
yang menyertakan salah satu parameter berikut, SDK mem-bypass pengelola batch dan mengirimkan permintaan asinkron receiveMessage
reguler:
-
messageAttributeNames
-
messageSystemAttributeNames
-
messageSystemAttributeNamesWithStrings
-
overrideConfiguration
Ganti pengaturan konfigurasi untuk SqsAsyncBatchManager
Anda dapat menyesuaikan pengaturan berikut saat membuat SqsAsyncBatchManager
instance. Daftar pengaturan berikut tersedia di BatchOverrideConfiguration.Builder
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 |
200ms |
receiveMessageVisibilityTimeout |
Batas waktu visibilitas untuk pesan. Jika tidak disetel, default antrian akan digunakan. | Antrian default |
receiveMessageMinWaitDuration |
Waktu tunggu minimum untuk receiveMessage permintaan. Hindari pengaturan ke 0 untuk mencegah CPU pemborosan. |
50ms |
receiveMessageSystemAttributeNames |
Daftar nama atribut sistemreceiveMessage panggilan. |
Tidak ada |
receiveMessageAttributeNames |
Daftar nama atribut untuk meminta receiveMessage panggilan. |
Tidak ada |