โหมดของหัวข้อของ RabbitMQ คล้ายกับโหมดการเรียกแบบ routing แต่ความแตกต่างคือในโหมดหัวข้อ การจับคู่ของการเรียกการเรียกรอบระกำสนับสนุนการจับคู่แบบขยายในขณะที่โหมดการเรียกการเรียกรอบระกำสนับสนุนการจับคู่แบบแม่นยำเท่านั้น
แผนภาพโครงสร้าง
คำอธิบาย:
- P แทนผู้ผลิต, X แทนแลกเปลี่ยน, และ Q1, Q2 แทนคิว, C1, C2 แทนผู้บริโภค
- ประเภทแลกเปลี่ยนคือโหมดหัวข้อ
- ตรรกะการส่งข้อความของแลกเปลี่ยนทวิพเหมือนกับการจับคู่โดยใช้ Routing key ในข้อความกับ Routing keys ที่เกี่ยวข้องกับการผูกทั้งหมดของแลกเปลี่ยนผ่านการจับคู่แบบขยาย และหากมีการจับคู่ ก็จะส่งข้อความไปที่คิวที่ผูก
เคล็ดลับ: ความแตกต่างระหว่างโหมดหัวข้อและโหมดตรงอยู่ที่ว่าการจับคู่ของ Routing key รอบระกำสนับสนุนการจับคู่แบบขยาย ทุกอย่างอื่นเหมือนเดิม
เครื่องหมายว่าที่รองรับโดยโหมดหัวข้อมีดังนี้:
-
#
(เครื่องหมายแฮช) จับคู่หนึ่งคำหรือมากกว่า -
*
(เครื่องหมายดอกจัน) จับคู่เพียงคำเดียว
ตัวอย่าง:
Routing key ที่ผูกกับคิว Q1 = *.orange.*
Routing key ที่ผูกกับคิว Q2 = *.*.rabbit
และ lazy.#
หาก Routing key ของข้อความคือ "quick.orange.rabbit" จะตรงกับทั้งสองคิว Q1 และ Q2
เคล็ดลับ: หาก Routing key ไม่ตรงกับคิวใดๆ ข้อความจะถูกทอดทิ้ง หาก Routing key เป็นโล่ จะใช้งานเหมือนโหมดแฟนเอาท์และส่งข้อความตรงไปยังทุกๆ คิวโดยตรง
กรณีการใช้งาน
คล้ายกับโหมดการเรียกแบบ routing ความแตกต่างอยู่ที่ความยืดหยุ่นของเงื่อนไขการสมัครสมาชิกโดยเฉพาะกฎการจับคู่ที่ยืดหยุ่นมากขึ้นสำหรับ Routing key