All Products
Search
Document Center

ApsaraMQ for RabbitMQ:Exchange pesan gagal

Last Updated:Nov 10, 2025

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.reject atau basic.nack untuk 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:

  1. Produsen mengirim pesan ke exchange.

  2. Exchange merutekan pesan ke antrian.

  3. Konsumen mengambil pesan dari antrian.

  4. Pesan menjadi pesan gagal jika konsumen menolaknya atau jika konsumsi gagal setelah 16 kali pengiriman ulang.

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

  6. Dead-letter exchange merutekan pesan ke antrian pesan gagal.

dg_dead_letter_message_flow

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.

  1. Masuk ke Konsol ApsaraMQ for RabbitMQ.

  2. Pada halaman Overview, di bagian Resource Distribution, pilih wilayah.

  3. Pada halaman Instances, klik nama instans yang ingin Anda kelola.

  4. Di panel navigasi sebelah kiri, klik Queues.

  5. Pada halaman Queues, di samping vhost, pilih vhost dari daftar drop-down Change dan klik Create Queue.

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

  • reason: Alasan mengapa pesan menjadi pesan gagal.

  • queue: Antrian tempat pesan berada saat menjadi pesan gagal.

  • exchange: Exchange tempat pesan berada saat menjadi pesan gagal.

  • routing-keys: Kunci perutean pesan saat menjadi pesan gagal.

  • count: Jumlah kali pesan menjadi pesan gagal di antrian karena alasan tertentu.

  • time: Waktu saat pesan menjadi 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

  1. Pada halaman Instances di konsol ApsaraMQ for RabbitMQ, klik nama instans target.

  2. Pada halaman Instance Details, klik tab Limits.

  3. Klik Activate di samping TTL Feature Supported untuk mengaktifkan fitur TTL untuk antrian pesan gagal.

Penting
  • 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.