Batas waktu visibilitas 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.

Batas waktu visibilitas Amazon SQS

Ketika konsumen menerima dan memproses pesan dari antrian, pesan tetap berada dalam antrian. Amazon SQS tidak menghapus pesan secara otomatis. Karena Amazon SQS adalah sistem terdistribusi, tidak ada jaminan bahwa konsumen benar-benar menerima pesan (misalnya, karena masalah konektivitas, atau karena masalah dalam aplikasi konsumen). Dengan demikian, konsumen harus menghapus pesan dari antrian setelah menerima dan memprosesnya.

Grafik garis waktu yang menampilkan bagaimana permintaan diproses selama batas waktu visibilitas

Segera setelah pesan diterima, itu tetap dalam antrian. Untuk mencegah konsumen lain memproses pesan lagi, Amazon SQS menetapkan batas waktu visibilitas, periode waktu di mana Amazon SQS mencegah semua konsumen menerima dan memproses pesan. Batas waktu visibilitas default untuk pesan adalah 30 detik. Minimal adalah 0 detik. Maksimal 12 jam. Untuk informasi tentang mengonfigurasi batas waktu visibilitas untuk antrian menggunakan konsol, lihat. Mengkonfigurasi parameter antrian menggunakan konsol Amazon SQS

catatan

Untuk antrian standar, batas waktu visibilitas bukanlah jaminan untuk menerima pesan dua kali. Untuk informasi selengkapnya, lihat Pengiriman Amazon at-least-once SQS.

Antrian FIFO memungkinkan produsen atau konsumen untuk mencoba beberapa percobaan ulang:

  • Jika produser mendeteksi SendMessage tindakan yang gagal, ia dapat mencoba lagi mengirim sebanyak yang diperlukan, menggunakan ID deduplikasi pesan yang sama. Dengan asumsi bahwa produsen menerima setidaknya satu pengakuan sebelum interval deduplikasi berakhir, beberapa percobaan ulang tidak mempengaruhi urutan pesan atau memperkenalkan duplikat.

  • Jika konsumen mendeteksi ReceiveMessage tindakan yang gagal, ia dapat mencoba lagi sebanyak yang diperlukan, menggunakan ID percobaan permintaan terima yang sama. Dengan asumsi bahwa konsumen menerima setidaknya satu pengakuan sebelum batas waktu visibilitas berakhir, beberapa percobaan ulang tidak memengaruhi urutan pesan.

  • Saat Anda menerima pesan dengan ID grup pesan, tidak ada lagi pesan untuk ID grup pesan yang sama yang dikembalikan kecuali Anda menghapus pesan atau pesan tersebut menjadi terlihat.

Dalam pesan penerbangan

Pesan Amazon SQS memiliki tiga status dasar:

  1. Dikirim ke antrian oleh produser.

  2. Diterima dari antrian oleh konsumen.

  3. Dihapus dari antrian.

Sebuah pesan dianggap disimpan setelah dikirim ke antrian oleh produsen, tetapi belum diterima dari antrian oleh konsumen (yaitu, antara negara bagian 1 dan 2). Tidak ada kuota untuk jumlah pesan yang disimpan. Sebuah pesan dianggap dalam penerbangan setelah diterima dari antrian oleh konsumen, tetapi belum dihapus dari antrian (yaitu, antara negara 2 dan 3). Ada kuota untuk jumlah pesan dalam penerbangan.

penting

Kuota yang berlaku untuk pesan dalam penerbangan tidak terkait dengan jumlah pesan tersimpan yang tidak terbatas.

Untuk sebagian besar antrian standar (tergantung pada lalu lintas antrian dan backlog pesan), bisa ada maksimum sekitar 120.000 dalam pesan penerbangan (diterima dari antrian oleh konsumen, tetapi belum dihapus dari antrian). Jika Anda mencapai kuota ini saat menggunakan polling singkat, Amazon SQS mengembalikan OverLimit pesan kesalahan. Jika Anda menggunakan polling panjang, Amazon SQS tidak mengembalikan pesan kesalahan. Untuk menghindari mencapai kuota, Anda harus menghapus pesan dari antrian setelah diproses. Anda juga dapat meningkatkan jumlah antrian yang Anda gunakan untuk memproses pesan Anda. Untuk meminta peningkatan kuota, kirimkan permintaan dukungan.

Untuk antrian FIFO, bisa ada maksimum 20.000 dalam pesan penerbangan (diterima dari antrian oleh konsumen, tetapi belum dihapus dari antrian). Jika Anda mencapai kuota ini, Amazon SQS tidak mengembalikan pesan kesalahan.

penting

Saat bekerja dengan antrian FIFO, DeleteMessage operasi akan gagal jika permintaan diterima di luar jendela batas waktu visibilitas. Jika batas waktu visibilitas adalah 0 detik, pesan harus dihapus dalam milidetik yang sama saat dikirim, atau dianggap ditinggalkan. Hal ini dapat menyebabkan Amazon SQS menyertakan pesan duplikat dalam respons yang sama terhadap ReceiveMessage operasi jika MaxNumberOfMessages parameternya lebih besar dari 1. Untuk detail selengkapnya lihat Cara Kerja Amazon SQS FIFO API.

Mengatur batas waktu visibilitas

Batas waktu visibilitas dimulai saat Amazon SQS mengembalikan pesan. Selama waktu ini, konsumen memproses dan menghapus pesan. Namun, jika konsumen gagal sebelum menghapus pesan dan sistem Anda tidak memanggil DeleteMessage tindakan untuk pesan tersebut sebelum batas waktu visibilitas berakhir, pesan akan terlihat oleh konsumen lain dan pesan diterima lagi. Jika pesan harus diterima hanya sekali, konsumen Anda harus menghapusnya dalam durasi batas waktu visibilitas.

Setiap antrian Amazon SQS memiliki pengaturan batas waktu visibilitas default 30 detik. Anda dapat mengubah pengaturan ini untuk seluruh antrian. Biasanya, Anda harus mengatur batas waktu visibilitas ke waktu maksimum yang dibutuhkan aplikasi Anda untuk memproses dan menghapus pesan dari antrian. Saat menerima pesan, Anda juga dapat mengatur batas waktu visibilitas khusus untuk pesan yang dikembalikan tanpa mengubah batas waktu antrian secara keseluruhan. Untuk informasi selengkapnya, lihat praktik terbaik di Memproses pesan tepat waktu di Amazon SQS bagian ini.

Jika Anda tidak tahu berapa lama waktu yang dibutuhkan untuk memproses pesan, buat detak jantung untuk proses konsumen Anda: Tentukan batas waktu visibilitas awal (misalnya, 2 menit) dan lalu—selama konsumen Anda masih mengerjakan pesan tersebut—terus perpanjang batas waktu visibilitas sebanyak 2 menit setiap menit.

penting

Batas waktu visibilitas maksimum adalah 12 jam dari waktu Amazon SQS menerima permintaan. ReceiveMessage Memperpanjang batas waktu visibilitas tidak mengatur ulang maksimum 12 jam.

Selain itu, Anda mungkin tidak dapat mengatur batas waktu pada pesan individual ke 12 jam penuh (misalnya 43.200 detik) sejak ReceiveMessage permintaan memulai pengatur waktu. Misalnya, jika Anda menerima pesan dan segera mengatur maksimum 12 jam dengan mengirim ChangeMessageVisibility panggilan VisibilityTimeout sama dengan 43.200 detik, kemungkinan akan gagal. Namun, menggunakan nilai 43.195 detik akan berfungsi kecuali ada penundaan yang signifikan antara meminta pesan melalui ReceiveMessage dan memperbarui batas waktu visibilitas. Jika konsumen Anda membutuhkan waktu lebih dari 12 jam, pertimbangkan untuk menggunakan Step Functions.

Mengubah batas waktu visibilitas untuk pesan

Saat Anda menerima pesan dari antrian dan mulai memprosesnya, batas waktu visibilitas untuk antrian mungkin tidak mencukupi (misalnya, Anda mungkin perlu memproses dan menghapus pesan). Anda dapat mempersingkat atau memperluas visibilitas pesan dengan menentukan nilai batas waktu baru menggunakan tindakan. ChangeMessageVisibility

Misalnya, jika batas waktu default untuk antrian adalah 60 detik, 15 detik telah berlalu sejak Anda menerima pesan, dan Anda mengirim ChangeMessageVisibility panggilan dengan VisibilityTimeout disetel ke 10 detik, 10 detik mulai dihitung dari waktu Anda melakukan panggilan. ChangeMessageVisibility Dengan demikian, setiap upaya untuk mengubah batas waktu visibilitas atau menghapus pesan itu 10 detik setelah Anda awalnya mengubah batas waktu visibilitas (total 25 detik) dapat mengakibatkan kesalahan.

catatan

Periode batas waktu baru berlaku sejak Anda memanggil ChangeMessageVisibility tindakan. Selain itu, periode batas waktu baru hanya berlaku untuk penerimaan pesan tertentu. ChangeMessageVisibilitytidak mempengaruhi batas waktu penerimaan pesan selanjutnya atau antrian selanjutnya.

Mengakhiri batas waktu visibilitas untuk pesan

Ketika Anda menerima pesan dari antrian, Anda mungkin menemukan bahwa Anda sebenarnya tidak ingin memproses dan menghapus pesan itu. Amazon SQS memungkinkan Anda menghentikan batas waktu visibilitas untuk pesan tertentu. Ini membuat pesan segera terlihat oleh komponen lain dalam sistem dan tersedia untuk diproses.

Untuk mengakhiri batas waktu visibilitas pesan setelah meneleponReceiveMessage, panggil ChangeMessageVisibilitydengan VisibilityTimeout disetel ke 0 detik.