Exchange pesan gagal di ApsaraMQ for RabbitMQ memproses pesan yang ditolak oleh konsumen atau yang gagal setelah semua upaya pengiriman ulang. Topik ini menjelaskan konsep inti, proses perutean, metode konfigurasi, dan catatan penggunaan untuk exchange pesan gagal, serta menyediakan tautan ke topik terkait.
Konsep inti
Dead-letter exchange
Dead-letter exchange mengirimkan pesan gagal ke antrian pesan gagal berdasarkan kunci binding, kunci perutean pesan gagal, dan atribut header. Tipe exchange standar apa pun, seperti direct exchange, dapat dikonfigurasi sebagai dead-letter exchange.
Dead-letter routing key
Kunci perutean yang menentukan bagaimana pesan gagal dirutekan. Jika Anda tidak menentukan dead-letter routing key, kunci perutean asli dari pesan tersebut akan digunakan.
Dead-letter message
Pesan yang dikirim ke dead-letter exchange. Pesan dapat dikirim ke dead-letter exchange dalam skenario berikut:
Parameter requeue diatur ke false, dan konsumen menggunakan
basic.rejectataubasic.nackuntuk mengirimkan penolakan (NACK) terhadap pesan.Pesan gagal dikonsumsi setelah dikirim ulang sebanyak 16 kali. Untuk informasi selengkapnya, lihat Kebijakan pengiriman ulang konsumsi.
Pesan kedaluwarsa. Waktu penyimpanan pesan di antrian melebihi TTL pesan yang ditentukan. Untuk informasi selengkapnya, lihat TTL Pesan.
Dead-letter queue
Antrian yang di-bind ke dead-letter exchange untuk menyimpan pesan gagal.
Proses perutean
Langkah-langkah berikut menjelaskan proses perutean pesan gagal:
Produsen mengirim pesan ke exchange.
Exchange merutekan pesan ke antrian.
Konsumen mengambil pesan dari antrian.
Pesan menjadi pesan gagal jika konsumen menolaknya atau jika konsumsi gagal setelah 16 kali pengiriman ulang.
Antrian mengirim pesan gagal ke dead-letter exchange berdasarkan parameter x-dead-letter-exchange dan menentukan dead-letter routing key untuk pesan tersebut berdasarkan parameter x-dead-letter-routing-key.
Dead-letter exchange merutekan pesan ke antrian pesan gagal.

Catatan penggunaan
ApsaraMQ for RabbitMQ tidak mengizinkan perutean pesan gagal lintas vhost. Pastikan dead-letter exchange dan antrian yang sesuai berada dalam vhost yang sama.
Anda tidak dapat mengubah dead-letter exchange dari antrian yang sudah ada di ApsaraMQ for RabbitMQ. Untuk mengganti dead-letter exchange, Anda harus menghapus antrian tersebut dan membuat antrian baru dengan konfigurasi yang diperbarui.
Metode konfigurasi
Anda dapat mengonfigurasi dead-letter exchange menggunakan salah satu metode berikut di ApsaraMQ for RabbitMQ:
Konsol
Anda dapat mengonfigurasi dead-letter exchange untuk suatu antrian saat membuat antrian tersebut di konsol ApsaraMQ for RabbitMQ.
Masuk ke Konsol ApsaraMQ for RabbitMQ.
Pada halaman Overview, di bagian Resource Distribution, pilih wilayah.
Pada halaman Instances, klik nama instans yang ingin Anda kelola.
Di panel navigasi sebelah kiri, klik Queues.
Pada halaman Queues, di samping vhost, pilih vhost dari daftar drop-down Change dan klik Create Queue.
Pada panel Create Queue, konfigurasikan parameter berikut dan klik OK.
Parameter
Deskripsi
Catatan penggunaan
Queue Name
Nama antrian.
Nama dapat berisi huruf, angka, tanda hubung (-), garis bawah (_), titik (.), tanda pagar (#), garis miring (/), dan tanda at (@).
Nama harus terdiri dari 1 hingga 255 karakter.
Setelah antrian dibuat, Anda tidak dapat mengubah namanya. Jika ingin mengganti nama antrian, hapus antrian tersebut dan buat antrian baru.
amq. adalah bidang yang dicadangkan dan tidak dapat digunakan sebagai awalan nama exchange. Misalnya, Anda tidak dapat menggunakan amq.test sebagai nama exchange.
Auto Delete
Menentukan apakah antrian secara otomatis dihapus setelah langganan terakhir dari konsumen ke antrian tersebut dibatalkan.
true: Antrian secara otomatis dihapus setelah langganan terakhir dari konsumen ke antrian ini dibatalkan.
false: Antrian tidak secara otomatis dihapus setelah langganan terakhir dari konsumen ke antrian ini dibatalkan.
Advanced Settings
Parameter lain untuk antrian, seperti dead-letter exchange, dead-letter routing key, dan waktu hidup pesan (TTL).
DeadLetterExchange: exchange tempat pesan gagal dikirimkan.
DeadLetterRoutingKey: kunci perutean pesan gagal. Dead-letter exchange mengirimkan pesan gagal ke antrian yang kunci peruteannya cocok dengan kunci perutean pesan gagal tersebut.
MessageTTL: TTL pesan, dalam milidetik. Pesan yang tidak dikonsumsi dalam TTL pesan yang ditentukan menjadi pesan gagal dan dikirim ke dead-letter exchange. Untuk informasi selengkapnya, lihat TTL Pesan.
API
Anda dapat mengonfigurasi dead-letter exchange untuk suatu antrian saat memanggil operasi API CreateQueue untuk membuat antrian tersebut. Untuk informasi selengkapnya, lihat CreateQueue.
Klien
Anda juga dapat mengonfigurasi dead-letter exchange untuk suatu antrian saat mendeklarasikan antrian pada klien ApsaraMQ for RabbitMQ.
Gunakan parameter x-dead-letter-exchange untuk menentukan dead-letter exchange dan parameter x-dead-letter-routing-key untuk menentukan dead-letter routing key.
Sebagai contoh, untuk mendeklarasikan exchange direct bernama some.exchange.name, gunakan parameter x-dead-letter-exchange untuk menentukan dead-letter exchange dan parameter x-dead-letter-routing-key untuk menentukan demo-routing-key sebagai dead-letter routing key.
Kode contoh dalam Java:
channel.exchangeDeclare("some.exchange.name", "direct");
Map<String, Object> args = new HashMap<String, Object>();
arguments.put("x-dead-letter-exchange", "some.exchange.name");
arguments.put("x-dead-letter-routing-key", "demo-routing-key");
channel.queueDeclare("MyQueue", false, false, false, arguments);Dead-letter Header
Header pesan gagal mencakup informasi berikut:
Header | Deskripsi |
x-first-death-exchange | Exchange tempat pesan berada saat pertama kali menjadi pesan gagal. |
x-first-death-queue | Antrian tempat pesan berada saat pertama kali menjadi pesan gagal. |
x-first-death-reason | Alasan mengapa pesan pertama kali menjadi pesan gagal. |
x-death-total | Jumlah kali pesan menjadi pesan gagal. |
x-death | Array yang berisi informasi lebih rinci tentang pesan gagal.
|
Alasan yang mungkin meliputi hal berikut:
expired: TTL pesan telah kedaluwarsa.
nack: Pesan ditolak (NACKed) dengan parameter `requeue` diatur ke `false`.
reject: Pesan ditolak dengan parameter `requeue` diatur ke `false`.
Batas konsumsi terlampaui
Aktifkan fitur TTL untuk antrian pesan gagal
Secara default, fitur time-to-live (TTL) dinonaktifkan untuk pesan di antrian pesan gagal. Artinya, meskipun TTL diatur pada antrian pesan gagal, pesan di dalamnya tidak akan kedaluwarsa dan tidak akan dirutekan ke antrian pesan gagal lainnya. Anda dapat mengaktifkan fitur ini untuk suatu instans di konsol. Saat diaktifkan, pesan gagal akan mengikuti pengaturan TTL dari antrian pesan gagal tempat pesan tersebut berada. Jika TTL pesan kedaluwarsa di antrian pesan gagal, pesan tersebut akan diteruskan ke dead-letter exchange berikutnya yang dikonfigurasi.
Batasan instans
Fitur TTL untuk antrian pesan gagal tersedia untuk instans Serverless, Enterprise Edition (Subscription), dan Platinum Edition (Subscription).
Prosedur
Pada halaman Instances di konsol ApsaraMQ for RabbitMQ, klik nama instans target.
Pada halaman Instance Details, klik tab Limits.
Klik Activate di samping TTL Feature Supported untuk mengaktifkan fitur TTL untuk antrian pesan gagal.
Saat mengonfigurasi antrian pesan gagal, hindari pembuatan loop pesan. Misalnya, jika Anda menetapkan Antrian B sebagai antrian pesan gagal untuk Antrian A dan menetapkan Antrian A sebagai antrian pesan gagal untuk Antrian B, hal ini akan menciptakan loop perutean pesan gagal. Jika loop terdeteksi dan tidak ada event penolakan pesan yang terjadi dalam loop tersebut, fitur TTL secara otomatis dinonaktifkan untuk pesan yang terpengaruh guna mencegah perutean tak terbatas.
Pesan gagal dapat dirutekan antar antrian maksimal sebanyak 16 kali. Setelah batas ini tercapai, fitur TTL dinonaktifkan untuk pesan gagal yang terpengaruh.
Informasi lebih lanjut
Untuk informasi selengkapnya tentang cara menghapus dead-letter exchange atau mengikat antrian pesan gagal ke dead-letter exchange, lihat Kelola exchange.