Queue Properties
การ declare queue คือการตัดสินใจ
หัวข้อที่มีชื่อว่า “การ declare queue คือการตัดสินใจ”ทุกครั้งที่ declare queue คุณส่ง flag เข้าไปไม่กี่ตัว ดูเหมือน boilerplate แต่แต่ละตัวเปลี่ยนว่า queue จะอยู่ได้นานแค่ไหนและใครใช้ queue นั้นได้บ้าง ตั้งผิดแล้ว queue ของคุณอาจหายไปตอนที่ไม่คาดคิด หรือค้างอยู่ตลอดกาลตอนที่อยากให้หายไป
มี boolean flag สามตัวและถุงใส่ argument เพิ่มเติมอีกหนึ่งถุง
durable — รอดจากการ restart broker
หัวข้อที่มีชื่อว่า “durable — รอดจากการ restart broker”durable queue ถูกเขียนลง disk ดังนั้น definition ของตัวเองรอดจากการ restart RabbitMQ ส่วน queue ที่ไม่ durable (transient) จะถูกลืมเมื่อ broker restart
flag นี้คนเข้าใจผิดบ่อยที่สุด จึงต้องพูดให้ชัด: durable รักษา ตัว queue ไว้ ไม่ใช่ message ในนั้น ถ้าอยากให้ message รอดด้วย message ต้องถูก publish แบบ persistent (บทเรียนถัดไป) durable queue + persistent message คือคู่ที่ทำให้ “รอดจาก restart” — ขาดตัวใดตัวหนึ่งก็ยังเสียข้อมูลอยู่ดี
queue ไหนที่สำคัญ ให้ตั้ง durable: true
exclusive — connection เดียวเท่านั้น แล้วก็หายไป
หัวข้อที่มีชื่อว่า “exclusive — connection เดียวเท่านั้น แล้วก็หายไป”exclusive queue ใช้ได้เฉพาะ connection ที่ declare queue นั้นเท่านั้น และ ถูกลบอัตโนมัติเมื่อ connection นั้นปิด เหมาะสำหรับ reply queue ส่วนตัวชั่วคราว (คุณจะเห็นในบทเรียน RPC) และไม่เหมาะกับอะไรที่ต้องใช้ร่วมกัน
auto-delete — หายไปเมื่อ consumer ตัวสุดท้ายจากไป
หัวข้อที่มีชื่อว่า “auto-delete — หายไปเมื่อ consumer ตัวสุดท้ายจากไป”auto-delete queue ถูกลบเมื่อ consumer ตัวสุดท้าย unsubscribe (ต้องเคยมี consumer อย่างน้อยหนึ่งตัว) มีประโยชน์สำหรับ subscription ชั่วคราวที่ queue ไม่มีเหตุผลจะอยู่ต่อหลัง subscriber จากไป
declare durable queue
หัวข้อที่มีชื่อว่า “declare durable queue”// durable: true → the queue definition survives a broker restartawait channel.assertQueue('orders', { durable: true, exclusive: false, autoDelete: false,});# durable=True → the queue definition survives a broker restartchannel.queue_declare( queue="orders", durable=True, exclusive=False, auto_delete=False,)// args: name, durable, autoDelete, exclusive, noWait, tableq, err := ch.QueueDeclare( "orders", // name true, // durable false, // auto-delete false, // exclusive false, // no-wait nil, // arguments)x-* arguments — ทุกอย่างที่เหลือ
หัวข้อที่มีชื่อว่า “x-* arguments — ทุกอย่างที่เหลือ”นอกจาก boolean สามตัว queue ยังรับ arguments table (มักเรียกว่า x-arguments เพราะ key ขึ้นต้นด้วย x-) ซึ่งปลดล็อกพฤติกรรมขั้นสูงที่จะครอบคลุมในคอร์สนี้ต่อไป:
| Argument | ทำอะไร |
|---|---|
x-message-ttl | message expire หลังจาก N มิลลิวินาที |
x-expires | ตัว queue เองถูกลบหลังจากไม่ถูกใช้ N ms |
x-max-length | จำกัดจำนวน message; overflow ถูก drop หรือ reject |
x-dead-letter-exchange | ที่ที่ message ซึ่ง expire/reject ถูกส่งไป (บทเรียน DLX) |
x-queue-type | classic หรือ quorum (บทเรียน clustering) |