全部产品
Search
文档中心

ApsaraMQ for RabbitMQ:Pertukaran

更新时间:Jun 28, 2025

Topik ini memperkenalkan konsep pertukaran dan jenis-jenisnya dalam ApsaraMQ for RabbitMQ, membantu Anda memahami dan memilih pertukaran yang sesuai.

Apa itu pertukaran?

Pertukaran adalah komponen pengarahan pesan di ApsaraMQ for RabbitMQ. Ketika produsen mengirim pesan ke broker ApsaraMQ for RabbitMQ, pesan tersebut dikirim ke pertukaran. Pertukaran kemudian mengarahkan pesan ke satu atau lebih antrian berdasarkan atribut kunci routing dan header.

Pertukaran langsung

  • Aturan Routing

    Pertukaran langsung mengarahkan pesan ke antrian dengan kunci route yang persis cocok dengan kunci routing pesan.

  • Skenario

    Pertukaran langsung cocok untuk skenario di mana pesan dibedakan oleh string sederhana. Biasanya digunakan untuk pengarahan unicast pesan.

  • Contoh

    Gambar berikut menunjukkan contoh penggunaannya:

    direct_exchange

    Pesan

    Kunci routing

    Kunci routing dalam pengikatan

    Antrian

    Pesan A

    img.create

    img.create

    Antrian A

    Pesan B

    img.log

    img.log

    Antrian B

Pertukaran topik

  • Aturan Routing

    Pertukaran topik mengarahkan pesan ke antrian dengan kunci route yang sebagian cocok dengan kunci routing pesan. Wildcard seperti tanda bintang (*) atau tanda pagar (#) digunakan untuk mendukung pencocokan sebagian. Tanda bintang (*) mewakili satu kata (contoh: cn), sedangkan tanda pagar (#) mewakili nol, satu, atau lebih kata yang dipisahkan oleh titik (contoh: cn.zj.hz).

  • Skema

    Pertukaran topik ideal untuk skenario di mana pesan dibedakan menggunakan wildcard. Sering digunakan untuk pengarahan multicast, seperti distribusi data lokasi geografis.

  • Contoh

    Gambar berikut menunjukkan contoh penggunaannya:

    topic_exchange

    Pesan

    Kunci routing

    Kunci routing dalam pengikatan

    Antrian

    Pesan A

    files.cn.hz

    files.cn.hz.#

    Antrian A

    Pesan B

    files.cn.hz.store

    • files.cn.hz.#

    • files.cn.*.store

    • Antrian A

    • Antrian B

    Pesan C

    files.cn.sz.store

    files.cn.*.store

    Antrian B

Pertukaran siaran

  • Aturan Routing

    Pertukaran siaran mengarahkan pesan ke semua antrian yang terikat padanya, tanpa memperhatikan kunci routing.

  • Skema

    Pertukaran siaran cocok untuk pengarahan siaran pesan, seperti pembaruan status atau konfigurasi dalam sistem distribusi.

  • Contoh

    Gambar berikut menunjukkan contoh penggunaannya:

    fanout_exchange

    Pesan

    Kunci routing

    Kunci routing dalam pengikatan

    Antrian

    Pesan A

    img.create

    • files.cn.hz.#

    • queue.msgText

    • Antrian A

    • Antrian B

    Pesan B

    queue.msgMap

    • files.cn.hz.#

    • queue.msgText

    • Antrian A

    • Antrian B

    Pesan C

    cn.hz.topic.alarm

    • files.cn.hz.#

    • queue.msgText

    • Antrian A

    • Antrian B

Pertukaran header

  • Aturan Routing

    Pertukaran header mirip dengan pertukaran langsung, tetapi mengarahkan pesan berdasarkan atribut header alih-alih kunci routing. Saat mengikat pertukaran header ke antrian, atribut pengikatan harus dikonfigurasi dalam format kunci-nilai. Begitu juga saat mengirim pesan ke pertukaran header, atribut header harus dikonfigurasi dalam format kunci-nilai.

    Atribut pengikatan khusus x-match digunakan untuk menentukan metode pencocokan. Nilai x-match dapat diatur ke all atau any.

    • all: Pesan hanya diarahkan ke antrian jika semua atribut pengikatan (kecuali x-match) cocok dengan atribut header pesan.

    • any: Pesan diarahkan ke antrian jika satu atau lebih atribut pengikatan (kecuali x-match) cocok dengan atribut header pesan.

    Atribut header dianggap cocok dengan atribut pengikatan dalam skenario berikut:

    • Kunci dan nilai atribut header sama dengan kunci dan nilai atribut pengikatan.

    • Kunci atribut header sama dengan kunci atribut pengikatan, tetapi nilai atribut pengikatan kosong.

  • Skema

    Pertukaran header cocok untuk skenario di mana pesan dibedakan oleh beberapa atribut header. Biasanya digunakan untuk pengarahan multicast, seperti distribusi berita yang diklasifikasikan atau diberi tag.

  • Contoh

    Gambar berikut menunjukkan contoh penggunaannya:

    headers_exchange

    Pesan

    Atribut header pesan

    Atribut header pengikatan

    Antrian

    Pesan A

    type=read
    resource=group
    • type=read
      resource=group
      x-match=all
    • type=read
      resource=topic
      x-match=any
    • Antrian A

    • Antrian B

    Pesan B

    type=read
    type=read
    resource=topic
    x-match=any

    Antrian B

    Pesan C

    type=write
    resource=topic
    type=read
    resource=topic
    x-match=any

    Antrian B

x-delayed-message exchanges

ApsaraMQ for RabbitMQ kompatibel dengan x-delayed-message exchanges yang disediakan oleh RabbitMQ open source. Di RabbitMQ open source, Anda perlu menginstal plugin untuk menggunakan x-delayed-message exchanges. Namun, di ApsaraMQ for RabbitMQ, Anda cukup mendeklarasikan exchange bertipe x-delayed-message dan mengatur atribut header x-delay dari pesan untuk menentukan periode penundaan dalam milidetik. Pesan akan dikirim ke antrian setelah periode waktu yang ditentukan oleh atribut header x-delay berakhir.

  • Aturan Routing

    Exchange x-delayed-message menentukan aturan routing berdasarkan tipe exchange yang ditentukan oleh atribut ekstensi x-delayed-type. Jenis-jenis exchange berikut mendukung tipe x-delayed-message:

  • Skema Penggunaan

    Exchange x-delayed-message cocok untuk skenario di mana pesan perlu dikirim setelah penundaan tertentu. Untuk informasi lebih lanjut, lihat Pesan Tertunda.

  • Contoh

    Exchange x-delayed-message merutekan pesan berdasarkan aturan routing dari tipe exchange yang ditentukan oleh atribut ekstensi x-delayed-type. Gambar berikut menunjukkan contoh exchange x-delayed-message dengan atribut ekstensi x-delayed-type disetel ke direct.

    x-delayed-message-exchange

    Pesan

    x-delay

    Kunci routing

    Kunci routing dalam pengikatan

    Antrian

    Pesan A

    3000

    img.create

    img.create

    Antrian A

    Pesan B

    4000

    img.log

    img.log

    Antrian B

    Berikut adalah penjelasan bagaimana exchange x-delayed-message merutekan Pesan A dan Pesan B:

    • Setelah menerima Pesan A, exchange x-delayed-message mengirimkan Pesan A ke Antrian A setelah 3.000 milidetik.

    • Setelah menerima Pesan B, exchange x-delayed-message mengirimkan Pesan B ke Antrian B setelah 4.000 milidetik.

x-consistent-hash exchanges

ApsaraMQ for RabbitMQ kompatibel dengan x-consistent-hash exchanges yang disediakan oleh RabbitMQ open source. Di RabbitMQ open source, Anda perlu menginstal plugin untuk menggunakan x-consistent-hash exchanges. Namun, di ApsaraMQ for RabbitMQ, Anda cukup mendeklarasikan exchange bertipe x-consistent-hash.

Catatan

x-consistent-hash exchanges tidak mendukung pengarahan pesan berdasarkan properti hash. Anda tidak dapat menggunakan ID pesan, ID korelasi, atau timestamp untuk menghitung rute.

  • Aturan Routing

    • x-consistent-hash exchanges memungkinkan Anda merutekan pesan berdasarkan nilai kunci routing atau header. Setelah menerima pesan, exchange melakukan perhitungan hash berdasarkan nilai kunci routing atau header pesan untuk menentukan antrian tujuan.

    • Nilai hash yang dihitung menggunakan kunci routing atau nilai header yang sama selalu sama. Akibatnya, pesan dengan kunci routing atau nilai header yang sama dirutekan ke antrian yang sama.

    • Jika Anda merutekan pesan berdasarkan nilai header, Anda harus menggunakan parameter hash-header untuk mendeklarasikan exchange dan header yang akan digunakan. Selain itu, pesan yang diterbitkan oleh produsen harus berisi header yang ditentukan oleh parameter hash-header. Jika header yang ditentukan tidak ada, semua pesan dirutekan ke antrian acak yang sama.

    • Jika baik kunci routing maupun parameter hash-header ditentukan, perhitungan hash dilakukan berdasarkan nilai parameter hash-header.

    • Saat mengikat exchange x-consistent-hash ke antrian, Anda harus menentukan kunci routing dengan nilai antara 1 hingga 20 untuk menunjukkan bobot antrian. Nilai yang lebih besar menunjukkan bobot yang lebih tinggi, yang berarti exchange menerima lebih banyak pesan.

    • Jika nilai kunci routing lebih besar dari 20, bobot dianggap 20.

    • Jika ada beberapa pengikatan, hanya pengikatan pertama yang nilainya bilangan bulat positif yang valid. Sebelum mengubah bobot antrian, Anda harus menghapus pengikatan yang ada.

  • Skema

    x-consistent-hash exchanges cocok untuk skenario di mana pesan dikategorikan berdasarkan bobot.

  • Contoh

    Exchange x-consistent-hash merutekan pesan ke antrian berdasarkan nilai hash yang dihitung menggunakan metode tertentu. Bobot antrian yang terikat pada exchange bervariasi, dan pesan dirutekan ke antrian berdasarkan bobot. Gambar berikut menunjukkan contoh exchange x-consistent-hash dengan aturan route yang dihitung berdasarkan kunci routing.

    x-consistent-hash

    Pesan

    Kunci routing

    Pesan A

    cn.hz.1

    Pesan B

    cn.hz.2

    Pesan C

    cn.hz.3

    Antrian

    Kunci routing dalam pengikatan

    Antrian A

    1

    Antrian B

    2

    Berikut adalah penjelasan bagaimana exchange x-consistent-hash merutekan Pesan A, Pesan B, dan Pesan C:

    • Setelah Pesan A, Pesan B, dan Pesan C tiba di exchange, exchange mengirimkan pesan-pesan tersebut ke antrian menggunakan nilai hash yang dihitung berdasarkan kunci routing.

    • Exchange terikat ke Antrian A dan Antrian B. Bobot Antrian A adalah 1, dan bobot Antrian B adalah 2. Dalam hal ini, Pesan A, Pesan B, dan Pesan C dirutekan ke Antrian A dan Antrian B berdasarkan rasio bobot 1:2.