Perkenalan: Di RabbitMQ, semua pesan yang dikirimkan oleh produsen diterima oleh Exchange, yang kemudian meneruskannya ke Antrean untuk penyimpanan sesuai dengan kebijakan tertentu RabbitMQ menyediakan empat jenis pertukaran: fanout, langsung, topik, dan header Mode header kurang digunakan dalam praktik, dan artikel ini hanya membandingkan tiga mode pertama.
1. Pertukaran Langsung
Setiap pesan yang dikirim ke Direct Exchange diteruskan ke Antrean yang ditentukan dalam RouteKey.
1. Secara umum, Anda dapat menggunakan Exchange yang disertakan dengan rabbitMQ:" (nama Exchange adalah string kosong, selanjutnya disebut sebagai Exchange default).
2. Dalam mode ini, tidak perlu melakukan operasi pengikatan apa pun di Exchange
3. "RouteKey" diperlukan untuk pesan, yang dapat dipahami secara sederhana sebagai nama antrian yang akan dikirim.
4. Jika nama antrean yang ditentukan dalam RouteKey tidak ada di vhost, pesan akan dijatuhkan.
2. Pertukaran Fanout
Setiap pesan yang dikirim ke Fanout Exchange diteruskan ke semua Antrean yang terikat ke Bursa tersebut.
1. Ini dapat dipahami sebagai pola tabel perutean
2. Mode ini tidak memerlukan RouteKey
3. Mode ini mengharuskan pengikatan Exchange ke Antrean terlebih dahulu, satu Bursa dapat mengikat beberapa Antrean, dan satu Antrean dapat terikat ke beberapa Bursa.
4. Jika Bursa yang menerima pesan tidak terikat ke Antrean apa pun, pesan akan dijatuhkan.
3. Pertukaran Topik
Setiap pesan yang dikirim ke Topic Exchange diteruskan ke semua Antrean yang peduli dengan topik yang ditentukan dalam RouteKey
1. Pola ini lebih kompleks, sederhananya, setiap antrean memiliki topik yang menjadi perhatiannya sendiri, semua pesan memiliki "judul" (RouteKey), dan Exchange akan meneruskan pesan ke semua antrean yang dapat secara fuguely cocok dengan RouteKey dari topik yang menjadi perhatian.
2. Mode ini memerlukan RouteKey, mungkin mengikat Exchange dan Queue terlebih dahulu.
3. Saat mengikat, berikan topik yang dipedulikan antrean, seperti "#.log.#" untuk menunjukkan bahwa antrean peduli dengan semua pesan yang terkait dengan log (pesan dengan RouteKey "MQ.log.error" akan diteruskan ke antrean).
4. "#" berarti 0 atau beberapa kata kunci, dan "" berarti satu kata kunci. Misalnya, "log". Ini dapat cocok dengan "log.warn", tetapi tidak dapat cocok dengan "log.warn.timeout"; Tetapi "log.#" cocok dengan di atas.
5. Demikian pula, jika Exchange tidak menemukan Antrean yang cocok dengan RouteKey, Exchange akan menjatuhkan pesan ini.
|