Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Mencoba lagi pengiriman SNS pesan Amazon
Amazon SNS mendefinisikan kebijakan pengiriman untuk setiap protokol pengiriman. Kebijakan pengiriman menentukan cara Amazon SNS mencoba ulang pengiriman pesan saat terjadi kesalahan sisi server (saat sistem yang meng-host titik akhir berlangganan menjadi tidak tersedia). Ketika kebijakan pengiriman habis, Amazon SNS berhenti mencoba kembali pengiriman dan membuang pesan—kecuali antrian surat mati dilampirkan ke langganan. Untuk informasi selengkapnya, lihat Antrian SNS surat mati Amazon.
Topik
Protokol dan kebijakan pengiriman
catatan
-
Dengan pengecualian HTTP/S, you can't change Amazon SNS-defined delivery policies. Only HTTP/S mendukung kebijakan khusus. Lihat Membuat kebijakan pengiriman HTTP /S.
-
Amazon SNS menerapkan jittering pada percobaan ulang pengiriman. Untuk informasi selengkapnya, lihat posting Exponential Backoff and Jitter (Backoff Eksponensial dan Jitter)
di AWS Architecture Blog (Blog Arsitektur). -
Total waktu coba ulang kebijakan untuk titik akhir HTTP /S tidak boleh lebih dari 3.600 detik. Ini adalah batas yang sulit dan tidak dapat ditingkatkan.
Jenis endpoint | Protokol pengiriman | Fase coba ulang segera (tanpa penundaan) | Fase pra-backoff | Fase backoff | Fase pasca-backoff | Jumlah percobaan |
---|---|---|---|---|---|---|
AWS titik akhir terkelola | Hos Pemadam Kebakaran Data Amazon¹ | 3 kali, tanpa penundaan | 2 kali, 1 detik terpisah | 10 kali, dengan backoff eksponensial, dari 1 detik sampai 20 detik | 100.000 kali, terpisah 20 detik | 100,015 kali, selama 23 hari |
AWS Lambda | ||||||
Amazon SQS | ||||||
Endpoint yang dikelola pelanggan | SMTP | 0 kali, tanpa penundaan | 2 kali, 10 detik terpisah | 10 kali, dengan backoff eksponensial, dari 10 detik hingga 600 detik (10 menit) | 38 kali, 600 detik (10 menit) terpisah | 50 percobaan, lebih dari 6 jam |
SMS | ||||||
Push seluler |
¹ Untuk kesalahan pembatasan dengan protokol Firehose, Amazon SNS menggunakan kebijakan pengiriman yang sama seperti untuk titik akhir yang dikelola pelanggan.
Tahap kebijakan pengiriman
Diagram berikut menunjukkan fase kebijakan pengiriman.
Setiap kebijakan pengiriman terdiri dari empat fase.
-
Immediate Retry Phase (No Delay) (Fase Coba Ulang Segera) (Tanpa Penundaan) – Fase ini terjadi segera setelah upaya pengiriman awal. Tidak ada penundaan antara pengiriman ulang pesan dalam fase ini.
-
Pre-Backoff Phase (Fase Pra-Backoff) – Fase ini mengikuti Immediate Retry Phase (Fase Coba Ulang Segera). Amazon SNS menggunakan fase ini untuk mencoba serangkaian percobaan ulang sebelum menerapkan fungsi backoff. Fase ini menentukan jumlah pengiriman ulang pesan dan jumlah penundaan antara mereka.
-
Backoff Phase (Fase Backoff) - Fase ini mengontrol penundaan antara pengiriman ulang pesan dengan menggunakan fungsi pengiriman retry-backoff. Fase ini menetapkan penundaan minimum, penundaan maksimum, dan fungsi retry-backoff yang menentukan seberapa cepat penundaan meningkat dari penundaan minimum ke maksimum. Fungsi backoff berupa aritmatika, eksponensial, geometris, atau linier.
-
Post-Backoff Phase (Fase Pasca Backoff) - Fase ini mengikuti fase backoff. Fase ini menentukan sejumlah pengiriman ulang pesan dan jumlah penundaan di antara mereka. Ini adalah fase terakhir.
Membuat kebijakan pengiriman HTTP /S
Anda dapat menggunakan kebijakan pengiriman dan empat tahapannya untuk menentukan cara Amazon SNS mencoba ulang pengiriman pesan ke titik akhir HTTP /S. Amazon SNS memungkinkan Anda mengganti kebijakan coba ulang default untuk HTTP titik akhir ketika Anda mungkin, misalnya, ingin menyesuaikan kebijakan berdasarkan kapasitas HTTP server Anda.
Anda dapat mengatur HTTP/S delivery policy as a JSON object at the subscription or topic
level. When you define the policy at the topic level, it applies to all HTTP/S langganan yang terkait dengan topik tersebut. Untuk menetapkan kebijakan pengiriman di tingkat langganan, Anda dapat menggunakan SetSubscriptionAttributes
APItindakan Subscribe
atau tindakan. Untuk menetapkan kebijakan pengiriman di tingkat topik, Anda dapat menggunakan SetTopicAttributes
APItindakan CreateTopic
atau tindakan. Atau, Anda juga dapat menggunakan sumber daya AWS::SNS: :Subscription di AWS CloudFormation template Anda.
Anda harus menyesuaikan kebijakan pengiriman sesuai dengan HTTP/S server's capacity. You can set the policy as a topic attribute or a subscription attribute. If all HTTP/S subscriptions in your topic target the same HTTP/S server, we recommend that you set the delivery policy as a topic attribute, so that it remains valid for all HTTP/S subscriptions in the topic. Otherwise, you must compose a delivery policy for each HTTP/S subscription in your topic, according the capacity of the HTTP/S server yang ditargetkan oleh kebijakan tersebut.
Anda juga dapat mengatur header Content-Type dalam kebijakan permintaan untuk menentukan jenis media notifikasi. Secara default, Amazon SNS mengirimkan semua notifikasi ke titik akhir HTTP /S dengan jenis konten yang disetel ketext/plain; charset=UTF-8
. Amazon SNS memungkinkan Anda mengganti kebijakan permintaan default. Lihat tabel di bawah ini untuk dukungan headerContentTypedan pengekangan.
JSONObjek berikut menunjukkan kebijakan pengiriman yang menginstruksikan Amazon SNS untuk mencoba kembali upaya pengiriman HTTP /S yang gagal, sebagai berikut:
-
3 kali segera dalam fase tanpa penundaan
-
2 kali (1 detik terpisah) dalam fase pra-backoff
-
10 kali (dengan backoff eksponensial dari 1 detik hingga 60 detik)
-
35 kali (60 detik terpisah) dalam fase pasca-backoff
Dalam kebijakan pengiriman sampel ini, Amazon SNS melakukan total 50 upaya sebelum membuang pesan. Untuk menyimpan pesan setelah percobaan ulang yang ditentukan dalam kebijakan pengiriman habis, konfigurasikan langganan Anda untuk memindahkan pesan yang tidak terkirim ke antrean huruf mati (). DLQ Untuk informasi selengkapnya, lihat Antrian SNS surat mati Amazon.
catatan
Kebijakan pengiriman ini juga menginstruksikan Amazon SNS untuk membatasi pengiriman hingga tidak lebih dari 10 per detik, menggunakan properti. maxReceivesPerSecond
Tingkat self-throttling ini dapat menghasilkan lebih banyak pesan yang dipublikasikan (lalu lintas masuk) daripada yang dikirim (lalu lintas keluar). Jika lalu lintas masuk lebih banyak daripada lalu lintas keluar, langganan Anda dapat mengakumulasi simpanan pesan yang besar, yang dapat menyebabkan latensi pengiriman pesan menjadi tinggi. Dalam kebijakan pengiriman Anda, pastikan untuk menentukan nilai untuk maxReceivesPerSecond
yang tidak berdampak buruk pada beban kerja Anda.
catatan
Kebijakan pengiriman ini mengesampingkan tipe konten default untuk notifikasi HTTP /S. application/json
{ "healthyRetryPolicy": { "minDelayTarget": 1, "maxDelayTarget": 60, "numRetries": 50, "numNoDelayRetries": 3, "numMinDelayRetries": 2, "numMaxDelayRetries": 35, "backoffFunction": "exponential" }, "throttlePolicy": { "maxReceivesPerSecond": 10 }, "requestPolicy": { "headerContentType": "application/json" } }
Kebijakan pengiriman terdiri dari kebijakan coba lagi, kebijakan throttle, dan kebijakan permintaan. Secara total, ada 9 atribut dalam kebijakan pengiriman.
Kebijakan | Deskripsi | Kendala |
---|---|---|
minDelayTarget |
Penundaan minimum untuk pengiriman ulang. Unit: Detik |
1 hingga penundaan maksimum Default: 20 |
maxDelayTarget |
Penundaan maksimum untuk pengiriman ulang. Unit: Detik |
Minimal delay ke 3.600 Default: 20 |
numRetries |
Jumlah total pengiriman ulang, termasuk pengiriman ulang langsung, pra-backoff, backoff, dan pasca-backoff. | 0 hingga 100 Default: 3 |
numNoDelayRetries |
Jumlah pengiriman ulang yang harus dilakukan segera, tanpa penundaan di antara mereka. | 0 atau lebih Default: 0 |
numMinDelayRetries |
Jumlah pengiriman ulang dalam fase pra-backoff, dengan penundaan minimum yang ditentukan di antara keduanya. | 0 atau lebih Default: 0 |
numMaxDelayRetries |
Jumlah pengiriman ulang dalam fase pasca-backoff, dengan penundaan maksimum di antara keduanya. | 0 atau lebih Default: 0 |
backoffFunction |
Model untuk backoff di antara pengiriman ulang. |
Salah satu dari empat pilihan:
Default: linier |
maxReceivesPerSecond
|
Jumlah maksimum pengiriman per detik, per langganan. | 1 atau lebih Default: Tidak ada throttling |
headerContentType
|
Jenis konten notifikasi yang dikirim ke titik akhir HTTP /S. |
Jika kebijakan permintaan tidak ditentukan, jenis konten akan menjadi default. Saat pengiriman pesan mentah dinonaktifkan untuk langganan (default), atau saat kebijakan pengiriman ditentukan pada tingkat topik, jenis konten header yang didukung adalah dan. Saat pengiriman pesan mentah diaktifkan untuk langganan, jenis konten berikut didukung:
|
Amazon SNS menggunakan rumus berikut untuk menghitung jumlah percobaan ulang dalam fase backoff:
numRetries - numNoDelayRetries - numMinDelayRetries - numMaxDelayRetries
Anda dapat menggunakan tiga parameter untuk mengontrol frekuensi pengiriman ulang dalam fase backoff.
-
minDelayTarget
— Menetapkan penundaan terkait dengan pengiriman ulang dalam fase backoff. -
maxDelayTarget
— Menetapkan penundaan terkait dengan pengiriman ulang terakhir dalam fase backoff. -
backoffFunction
— Mendefinisikan algoritme yang SNS digunakan Amazon untuk menghitung penundaan yang terkait dengan semua upaya coba lagi antara percobaan ulang pertama dan terakhir di fase backoff. Anda dapat menggunakan salah satu dari empat fungsi retry-backoff.
Diagram berikut menunjukkan bagaimana setiap fungsi backoff pengiriman ulang mempengaruhi penundaan terkait dengan pengiriman ulang selama fase backoff: Kebijakan pengiriman dengan jumlah total pengiriman ulang diatur ke 10, penundaan minimum diatur ke 5 detik, dan penundaan maksimum diatur ke 260 detik. Sumbu vertikal mewakili penundaan dalam detik yang terkait dengan masing-masing 10 kali pengiriman ulang. Sumbu horizontal mewakili jumlah pengiriman ulang, dari pengiriman ulang pertama hingga kesepuluh.