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:

Pesan
Kunci routing
Kunci routing dalam pengikatan
Antrian
Pesan A
img.createimg.createAntrian A
Pesan B
img.logimg.logAntrian 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:

Pesan
Kunci routing
Kunci routing dalam pengikatan
Antrian
Pesan A
files.cn.hzfiles.cn.hz.#Antrian A
Pesan B
files.cn.hz.storefiles.cn.hz.#files.cn.*.store
Antrian A
Antrian B
Pesan C
files.cn.sz.storefiles.cn.*.storeAntrian 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:

Pesan
Kunci routing
Kunci routing dalam pengikatan
Antrian
Pesan A
img.createfiles.cn.hz.#queue.msgText
Antrian A
Antrian B
Pesan B
queue.msgMapfiles.cn.hz.#queue.msgText
Antrian A
Antrian B
Pesan C
cn.hz.topic.alarmfiles.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:

Pesan
Atribut header pesan
Atribut header pengikatan
Antrian
Pesan A
type=read resource=grouptype=read resource=group x-match=alltype=read resource=topic x-match=any
Antrian A
Antrian B
Pesan B
type=readtype=read resource=topic x-match=anyAntrian B
Pesan C
type=write resource=topictype=read resource=topic x-match=anyAntrian 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.

Pesan
x-delay
Kunci routing
Kunci routing dalam pengikatan
Antrian
Pesan A
3000
img.createimg.createAntrian A
Pesan B
4000
img.logimg.logAntrian 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.
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.

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.