Antrian sementara Amazon SQS - Amazon Simple Queue Service

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

Antrian sementara Amazon SQS

Antrian sementara membantu Anda menghemat waktu pengembangan dan biaya penerapan saat menggunakan pola pesan umum seperti respon permintaan. Anda dapat menggunakan Klien Antrian Sementara untuk membuat antrean sementara yang dikelola aplikasi dengan throughput tinggi, hemat biaya, dan dikelola.

Klien memetakan beberapa antrian sementara —antrian yang dikelola aplikasi yang dibuat sesuai permintaan untuk proses tertentu—ke satu antrian Amazon SQS secara otomatis. Hal ini memungkinkan aplikasi Anda untuk membuat lebih sedikit panggilan API dan memiliki throughput yang lebih tinggi ketika lalu lintas ke setiap antrian sementara rendah. Ketika antrian sementara tidak lagi digunakan, klien membersihkan antrian sementara secara otomatis, bahkan jika beberapa proses yang menggunakan klien tidak ditutup dengan bersih.

Berikut ini adalah manfaat antrian sementara:

  • Mereka berfungsi sebagai saluran komunikasi ringan untuk utas atau proses tertentu.

  • Mereka dapat dibuat dan dihapus tanpa menimbulkan biaya tambahan.

  • Mereka kompatibel dengan API dengan antrian Amazon SQS statis (normal). Ini berarti bahwa kode yang ada yang mengirim dan menerima pesan dapat mengirim pesan ke dan menerima pesan dari antrian virtual.

Topik

Antrian virtual

Antrian virtual adalah struktur data lokal yang dibuat Klien Antrian Sementara. Antrian virtual memungkinkan Anda menggabungkan beberapa tujuan dengan lalu lintas rendah menjadi satu antrian Amazon SQS. Untuk praktik terbaik, lihat Hindari menggunakan kembali ID grup pesan yang sama dengan antrian virtual.

catatan
  • Membuat antrian virtual hanya menciptakan struktur data sementara bagi konsumen untuk menerima pesan. Karena antrian virtual tidak membuat panggilan API ke Amazon SQS, antrian virtual tidak dikenakan biaya.

  • Kuota TPS berlaku untuk semua antrian virtual di satu antrian host. Untuk informasi selengkapnya, lihat Kuota SQS pesan Amazon.

Kelas AmazonSQSVirtualQueuesClient pembungkus menambahkan dukungan untuk atribut yang terkait dengan antrian virtual. Untuk membuat antrian virtual, Anda harus memanggil tindakan CreateQueue API menggunakan HostQueueURL atribut. Atribut ini menentukan antrian yang ada yang menjadi tuan rumah antrian virtual.

URL antrian virtual dalam format berikut.

https://sqs.us-east-2.amazonaws.com/123456789012/MyQueue#MyVirtualQueueName

Saat produser memanggil tindakan SendMessage atau SendMessageBatch API pada URL antrian virtual, Klien Antrian Sementara melakukan hal berikut:

  1. Mengekstrak nama antrian virtual.

  2. Melampirkan nama antrian virtual sebagai atribut pesan tambahan.

  3. Mengirim pesan ke antrian host.

Sementara produser mengirim pesan, thread latar belakang polling antrian host dan mengirim pesan yang diterima ke antrian virtual sesuai dengan atribut pesan yang sesuai.

Saat konsumen memanggil tindakan ReceiveMessage API pada URL antrian virtual, Klien Antrian Sementara memblokir panggilan secara lokal hingga utas latar belakang mengirimkan pesan ke antrian virtual. (Proses ini mirip dengan pengambilan pesan di Klien Asinkron Buffered: satu tindakan API dapat memberikan pesan hingga 10 antrian virtual.) Menghapus antrian virtual akan menghapus sumber daya sisi klien apa pun tanpa memanggil Amazon SQS itu sendiri.

AmazonSQSTemporaryQueuesClientKelas mengubah semua antrian yang dibuatnya menjadi antrian sementara secara otomatis. Ini juga menciptakan antrian host dengan atribut antrian yang sama secara otomatis, sesuai permintaan. Nama-nama antrian ini berbagi awalan umum yang dapat dikonfigurasi (secara default,__RequesterClientQueues__) yang mengidentifikasi mereka sebagai antrian sementara. Hal ini memungkinkan klien untuk bertindak sebagai pengganti drop-in yang mengoptimalkan kode yang ada yang membuat dan menghapus antrian. Klien juga menyertakan AmazonSQSRequester dan AmazonSQSResponder antarmuka yang memungkinkan komunikasi dua arah antar antrian.

Pola pesan permintaan-respons (antrian virtual)

Kasus penggunaan yang paling umum untuk antrian sementara adalah pola pesan permintaan-respons, di mana pemohon membuat antrian sementara untuk menerima setiap pesan respons. Untuk menghindari pembuatan antrian Amazon SQS untuk setiap pesan respons, Klien Antrian Sementara memungkinkan Anda membuat dan menghapus beberapa antrian sementara tanpa melakukan panggilan API Amazon SQS apa pun. Untuk informasi selengkapnya, lihat Menerapkan sistem respons-permintaan.

Diagram berikut menunjukkan konfigurasi umum menggunakan pola ini.

Diagram pola permintaan-respons yang digunakan dengan Amazon SQS.

Contoh skenario: Memproses permintaan login

Contoh skenario berikut menunjukkan bagaimana Anda dapat menggunakan AmazonSQSRequester dan AmazonSQSResponder antarmuka untuk memproses permintaan login pengguna.

Di sisi klien

public class LoginClient { // Specify the Amazon SQS queue to which to send requests. private final String requestQueueUrl; // Use the AmazonSQSRequester interface to create // a temporary queue for each response. private final AmazonSQSRequester sqsRequester = AmazonSQSRequesterClientBuilder.defaultClient(); LoginClient(String requestQueueUrl) { this.requestQueueUrl = requestQueueUrl; } // Send a login request. public String login(String body) throws TimeoutException { SendMessageRequest request = new SendMessageRequest() .withMessageBody(body) .withQueueUrl(requestQueueUrl); // If no response is received, in 20 seconds, // trigger the TimeoutException. Message reply = sqsRequester.sendMessageAndGetResponse(request, 20, TimeUnit.SECONDS); return reply.getBody(); } }

Mengirim permintaan login melakukan hal berikut:

  1. Membuat antrian sementara.

  2. Melampirkan URL antrian sementara ke pesan sebagai atribut.

  3. Mengirim pesan.

  4. Menerima tanggapan dari antrian sementara.

  5. Menghapus antrian sementara.

  6. Mengembalikan respon.

Di sisi server

Contoh berikut mengasumsikan bahwa, setelah konstruksi, utas dibuat untuk polling antrian dan memanggil handleLoginRequest() metode untuk setiap pesan. Selain itu, doLogin() merupakan metode yang diasumsikan.

public class LoginServer { // Specify the Amazon SQS queue to poll for login requests. private final String requestQueueUrl; // Use the AmazonSQSResponder interface to take care // of sending responses to the correct response destination. private final AmazonSQSResponder sqsResponder = AmazonSQSResponderClientBuilder.defaultClient(); LoginServer(String requestQueueUrl) { this.requestQueueUrl = requestQueueUrl; } // Process login requests from the client. public void handleLoginRequest(Message message) { // Process the login and return a serialized result. String response = doLogin(message.getBody()); // Extract the URL of the temporary queue from the message attribute // and send the response to the temporary queue. sqsResponder.sendResponseMessage(MessageContent.fromMessage(message), new MessageContent(response)); } }

Membersihkan antrian

Untuk memastikan bahwa Amazon SQS merebut kembali sumber daya dalam memori yang digunakan oleh antrian virtual, ketika aplikasi Anda tidak lagi memerlukan Klien Antrian Sementara, itu harus memanggil metode. shutdown() Anda juga dapat menggunakan shutdown() metode AmazonSQSRequester antarmuka.

Klien Antrian Sementara juga menyediakan cara untuk menghilangkan antrian tuan rumah yatim piatu. Untuk setiap antrian yang menerima panggilan API selama periode waktu tertentu (secara default, lima menit), klien menggunakan tindakan TagQueue API untuk menandai antrian yang masih digunakan.

catatan

Setiap tindakan API yang diambil pada antrean menandainya sebagai non-idle, termasuk ReceiveMessage tindakan yang tidak menampilkan pesan.

Thread latar belakang menggunakan tindakan ListTags API ListQueues dan untuk memeriksa semua antrian dengan awalan yang dikonfigurasi, menghapus antrian apa pun yang belum diberi tag setidaknya selama lima menit. Dengan cara ini, jika satu klien tidak menutup dengan bersih, klien aktif lainnya membersihkannya. Untuk mengurangi duplikasi pekerjaan, semua klien dengan awalan yang sama berkomunikasi melalui antrian kerja internal bersama yang dinamai awalan.