Gunakan batching permintaan otomatis untuk Amazon SQS dengan AWS SDK for Java 2.x - AWS SDK for Java 2.x

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,, changeMessageVisibilitydeleteMessage, 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>

1 Versi terbaru

Buat pengelola batch

Batching permintaan otomatis API diimplementasikan oleh SqsAsyncBatchManagerantarmuka. Anda dapat membuat contoh manajer beberapa cara.

1. Konfigurasi default dengan menggunakan SqsAsyncClient

Cara paling sederhana Anda dapat membuat pengelola batch adalah dengan memanggil metode batchManager pabrik pada SqsAsyncClientinstance 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 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. 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 bagian. Anda juga dapat memberikan kustom ScheduledExecutorServiceuntuk pengelola batch dengan menggunakan pendekatan ini.

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. SDKBuffer 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

Anda dapat menghapus pesan dalam batch menggunakan SqsAsyncBatchManager#deleteMessagemetode ini. SDKBuffer 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

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 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 akan digunakan. Antrian default
receiveMessageMinWaitDuration Waktu tunggu minimum untuk receiveMessage permintaan. Hindari pengaturan ke 0 untuk mencegah CPU pemborosan. 50ms
receiveMessageSystemAttributeNames Daftar nama atribut sistem untuk meminta receiveMessage panggilan. Tidak ada
receiveMessageAttributeNames Daftar nama atribut untuk meminta receiveMessage panggilan. Tidak ada