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

Queues & Messages

จาก “ทำงานได้” ไปสู่ “มีพฤติกรรมที่ถูกต้อง”

หัวข้อที่มีชื่อว่า “จาก “ทำงานได้” ไปสู่ “มีพฤติกรรมที่ถูกต้อง””

ในโมดูลแรกคุณ publish message แล้ว consume กลับมา flow นั้นทำงานได้ก็จริง แต่แอบตัดสินใจแทนคุณหลายอย่าง: queue หายไปตอน restart, message อยู่แค่ใน memory, consumer ตัวเดียวอาจกินงานหมด และ message กองพะเนินไปเรื่อย ๆ ถ้าไม่มีใครอ่าน

โมดูลนี้ว่าด้วย knob เหล่านั้น แต่ละตัวคือ property เล็ก ๆ บน queue หรือ message ที่เปลี่ยนสิ่งที่จะเกิดขึ้นตอนโหลดหนัก ตอน fail และตอน restart

บทเรียนสิ่งที่คุณจะได้เรียนรู้
Queue propertiesdurable, exclusive, auto-delete และ x-* arguments
Message propertiespersistence, content type, header, priority และ correlation
Acknowledgementsmanual vs auto ack, requeue และ at-least-once delivery
Prefetch & QoSfair dispatch และทำไม prefetch แบบไม่จำกัดถึงทำให้ worker ตัวเดียวรับงานหนักเกิน
TTL & limitsการ expire ของ message/queue, max length และพฤติกรรมตอน overflow

ทุกอย่างในโมดูลนี้อยู่บนหนึ่งในสองสิ่ง — queue (declare ครั้งเดียว ใช้ร่วมกันทุกคน) หรือ message (set ใหม่ทุกครั้งที่ publish):

flowchart LR
  q["Queue properties
(durable, exclusive,
auto-delete, TTL, max-length)"] --> life["กำหนด lifecycle
และ limit ของ queue"]
  m["Message properties
(persistent, priority,
headers, content-type)"] --> deliv["กำหนดการ deliver
และ handling ของ message หนึ่งตัว"]
knob แต่ละตัวอยู่ที่ไหน

การตั้งค่าเหล่านี้ให้ถูกคือสิ่งที่แยก demo ออกจากระบบที่คุณกล้าเอาขึ้น production ตัวที่สำคัญที่สุด — acknowledgement — คือกลไกเบื้องหลัง “at-least-once” delivery ดังนั้นให้ความสนใจบทเรียนนั้นเป็นพิเศษ

queue และ message properties ควบคุมอะไรเป็นหลัก?
"queue properties" กับ "message properties" ใช้ที่ตอนไหน?
knob ตัวไหนคือกลไกเบื้องหลัง at-least-once delivery?