ข้ามไปยังเนื้อหา

Exchanges & Routing

exchange ไม่เก็บอะไรเลย หน้าที่เดียวของตัวเองคือ routing: รับ message ที่ publish เข้ามาแล้วตัดสินใจว่า queue ไหนบ้างจะได้ copy ไป วิธี ที่ตัดสินใจถูกกำหนดโดย type ของ exchange เข้าใจทั้ง 4 type แล้วคุณจะออกแบบ topology ของ message flow ได้แทบทุกรูปแบบ

บทเรียนexchange ตัดสินใจจาก…
Direct exchangerouting key ที่ตรงกัน เป๊ะ ๆ
Fanout exchangeไม่ดูอะไรเลย — copy ไปทุก queue ที่ bind อยู่
Topic exchangeการ match pattern ของ routing key แบบ dotted
Headers & choosingheader ของ message พร้อมคู่มือเลือก type
flowchart TB
  msg["message
routing key: order.created"] --> direct["direct
match key เป๊ะ"]
  msg --> fanout["fanout
ไม่ดู key, copy ทุกตัว"]
  msg --> topic["topic
match key pattern"]
  msg --> headers["headers
match จากค่า header"]
แต่ละ exchange type route message เดียวกันอย่างไร

โมเดลในหัวที่ให้ถือติดตัวไปทั้งโมดูล:

  • message ทุกตัวพก routing key (string อย่าง order.created) และ header (ถ้ามี) ไปด้วยเสมอ
  • binding แต่ละเส้นจาก exchange ไป queue อาจพก binding key (หรือ pattern หรือเงื่อนไข header) มาด้วย
  • exchange type คือ กฎ ที่เอา message มาเทียบกับ binding เพื่อเลือก queue

ที่เหลือ — pub/sub, การกระจายงาน, การ filter event — ก็แค่การเลือก exchange type บวกกับ binding ไม่กี่เส้น

หน้าที่เดียวของ exchange คืออะไร?
อะไรเป็นตัวกำหนดว่า exchange จะ route message อย่างไร?
exchange type ไหนที่ไม่สนใจ routing key เลย?