Queues & Messages
จาก “ทำงานได้” ไปสู่ “มีพฤติกรรมที่ถูกต้อง”
หัวข้อที่มีชื่อว่า “จาก “ทำงานได้” ไปสู่ “มีพฤติกรรมที่ถูกต้อง””ในโมดูลแรกคุณ publish message แล้ว consume กลับมา flow นั้นทำงานได้ก็จริง แต่แอบตัดสินใจแทนคุณหลายอย่าง: queue หายไปตอน restart, message อยู่แค่ใน memory, consumer ตัวเดียวอาจกินงานหมด และ message กองพะเนินไปเรื่อย ๆ ถ้าไม่มีใครอ่าน
โมดูลนี้ว่าด้วย knob เหล่านั้น แต่ละตัวคือ property เล็ก ๆ บน queue หรือ message ที่เปลี่ยนสิ่งที่จะเกิดขึ้นตอนโหลดหนัก ตอน fail และตอน restart
โมดูลนี้ครอบคลุมอะไรบ้าง
หัวข้อที่มีชื่อว่า “โมดูลนี้ครอบคลุมอะไรบ้าง”| บทเรียน | สิ่งที่คุณจะได้เรียนรู้ |
|---|---|
| Queue properties | durable, exclusive, auto-delete และ x-* arguments |
| Message properties | persistence, content type, header, priority และ correlation |
| Acknowledgements | manual vs auto ack, requeue และ at-least-once delivery |
| Prefetch & QoS | fair dispatch และทำไม prefetch แบบไม่จำกัดถึงทำให้ worker ตัวเดียวรับงานหนักเกิน |
| TTL & limits | การ expire ของ message/queue, max length และพฤติกรรมตอน overflow |
สอง object, สองชุด knob
หัวข้อที่มีชื่อว่า “สอง object, สองชุด knob”ทุกอย่างในโมดูลนี้อยู่บนหนึ่งในสองสิ่ง — 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 หนึ่งตัว"]
การตั้งค่าเหล่านี้ให้ถูกคือสิ่งที่แยก demo ออกจากระบบที่คุณกล้าเอาขึ้น production ตัวที่สำคัญที่สุด — acknowledgement — คือกลไกเบื้องหลัง “at-least-once” delivery ดังนั้นให้ความสนใจบทเรียนนั้นเป็นพิเศษ