~/VibeHandbook
PDF ฟรี

บท 14 · 07

คิว (Queue)

คิว () ให้คุณพูดว่า "ทำสิ่งนี้ทีหลัง" แทนที่จะพูดว่า "ทำสิ่งนี้เดี๋ยวนี้" เมื่อผู้ใช้สมัครสมาชิก คุณไม่อยากให้เขาต้องรอในขณะที่คุณส่งอีเมลต้อนรับและปรับขนาดรูปโปรไฟล์ของเขา ให้ส่งงานเหล่านั้นเข้าคิว (RabbitMQ, BullMQ, Cloudflare Queues, SQS) แล้วให้ worker เบื้องหลังคอยหยิบไปทำ ผู้ใช้จะได้รับการตอบสนองทันที

ใช้คิวสำหรับงานใด ๆ ที่ทำงานช้า สามารถล้มเหลวและลองใหม่ได้ หรือไม่จำเป็นต้องเสร็จก่อนที่คุณจะตอบสนองผู้ใช้

กับดักที่มือใหม่ส่วนใหญ่เจอคืองานที่เข้าคิวอาจถูกรันได้ มากกว่าหนึ่งครั้ง — เครือข่ายสะดุดทำให้ worker ลองใหม่ และตอนนี้อีเมลต้อนรับก็ถูกส่งไปสองครั้ง วิธีแก้คือทำให้งาน (ไม่ว่าจะรันกี่ครั้งก็ให้ผลลัพธ์เดียวกัน) ออกแบบให้การรันงานเดิมซ้ำสองครั้งมีผลเหมือนกับรันแค่ครั้งเดียว (ตรวจสอบว่า "ฉันส่งสิ่งนี้ไปแล้วหรือยัง" ก่อนที่จะส่ง) นอกจากนี้ ควรตัดสินใจล่วงหน้าด้วยว่าจะเกิดอะไรขึ้นกับงานที่ล้มเหลวซ้ำ ๆ ไม่หยุด คิวที่มีความเป็นผู้ใหญ่จะส่งงานนั้นไปยัง dead-letter queue เพื่อไม่ให้ข้อความที่มีปัญหาหนึ่งอันไปปิดกั้นงานอื่น ๆ ที่ต่อคิวอยู่ข้างหลัง

อยากได้แบบออฟไลน์?

ดาวน์โหลดหนังสือทั้งเล่มเป็น PDF หรือ EPUB — ฟรี