SQS - Delay Queues

ตอนนี้เรามาพูดถึง Delay Queue กันบ้างครับ Delay Queue ถูกออกแบบมาเพื่อหน่วงเวลาข้อความ (Message) ไม่ให้ Consumer มองเห็นทันที ข้อความจะถูกหน่วงเวลาได้สูงสุด 15 นาที
โดยค่าเริ่มต้น (Default) พารามิเตอร์ delay จะถูกตั้งไว้ที่ 0 วินาที นั่นหมายความว่า ทันทีที่คุณส่งข้อความเข้าไปในคิว SQS ข้อความนั้นจะสามารถถูกอ่านได้ทันที อย่างไรก็ตาม คุณสามารถตั้งค่า Default Delay ในระดับคิวได้ เพื่อกำหนดให้ข้อความทุกข้อความต้องถูกหน่วงเวลาไว้ตามจำนวนวินาทีที่ตั้งค่าไว้ หรือคุณจะกำหนดการหน่วงเวลาเป็นรายข้อความ (Per-Message Delay) ได้ โดยใช้พารามิเตอร์ DelaySeconds ตอนที่ส่งข้อความเข้าไป
วิธีการทำงานของ Delay Queue
ลองพิจารณาตัวอย่างคิวที่ Producer ส่งข้อความเข้ามา คิวอาจจะถูกตั้งค่า Default Delay เป็น 30 วินาที หลังจากเวลานี้ผ่านไป เมื่อ Consumer ทำการ Poll ข้อความ มันจึงจะมองเห็นและสามารถรับข้อความนั้นได้สำเร็จ
สาธิตการใช้งานใน AWS Console
เข้าไปที่ AWS SQS Console เพื่อดูการทำงานของ Delay Queue จริง ๆ
- เราจะสร้างคิวใหม่ชื่อ DelayQueue
- ในการตั้งค่า จะมีออปชันใหม่ชื่อว่า Delivery Delay โดยค่าเริ่มต้นจะเป็น 0 วินาที แต่สามารถตั้งค่าได้สูงสุดถึง 15 นาที
สำหรับการสาธิตครั้งนี้ เราจะตั้งค่า Delivery Delay = 10 วินาที นั่นหมายความว่าข้อความที่ถูกส่งเข้ามาจะต้องรอ 10 วินาทีก่อนที่จะพร้อมสำหรับ Consumer ส่วนการตั้งค่าอื่น ๆ ของคิวจะใช้ค่าเริ่มต้น จากนั้นก็กด Create queue
การส่งและรับข้อความ
หลังจากสร้าง Delay Queue แล้ว เราจะส่งข้อความที่มีเนื้อหาบางอย่างไป
- Console จะแสดงว่า Delivery Delay ถูกตั้งค่าไว้ที่ 10 วินาที
- ค่านี้สามารถ Override ได้รายข้อความ เช่น ตั้งเป็น 30 วินาที หรือ 0 วินาทีก็ได้ แต่ในตัวอย่างนี้เราจะคงไว้ที่ค่า Default = 10 วินาที
จากนั้นเราเริ่ม Poll ข้อความทันที แต่จะไม่เห็นข้อความ เนื่องจากยังอยู่ในช่วง Delay พอรอครบ 10 วินาที ข้อความก็จะปรากฏและ Consumer สามารถดึงไปใช้งานได้
สรุป
จากการสาธิต เราจะเห็นว่ามีการหน่วงเวลาระหว่างการส่งข้อความและการที่ Consumer จะได้รับข้อความจริง ๆ ฟีเจอร์ Delay Queue จึงมีประโยชน์สำหรับ Use Case ที่ต้องการประมวลผลข้อความแบบหน่วงเวลา
ในฐานะผู้เชี่ยวชาญที่ผ่านการรับรอง AWS คุณควรรู้ว่าฟีเจอร์นี้มีอยู่ใน SQS
Key Takeaways
- Delay Queue ใน SQS ใช้เพื่อเลื่อนการมองเห็นข้อความโดย Consumer ได้นานสูงสุด 15 นาที
- ค่า Default คือ 0 วินาที หมายถึง ข้อความพร้อมใช้งานทันทีเมื่อถูกส่ง
- สามารถกำหนด Delay ได้ทั้งในระดับคิว หรือในระดับรายข้อความ โดยใช้ DelaySeconds
- Delay Queue มีประโยชน์สำหรับกรณีที่ต้องการประมวลผลข้อความแบบหน่วงเวลา