มาทำ Queue ผ่าน SQS ของ AWS กัน Part Producer
Amazon Simple Queue Service (SQS) คือตัวจัดเก็บ body ที่เป็น json และดึงมาใช้งานโดยที่ข้อความเราจะไม่สูญหายเลยเมื่อทำการส่งมอบไปยังเป้าหมาย
Queue คืออะไร มันคือตัวที่ช่วยป้องกันการ Lost Message จากเหตุการณ์ต่างๆไม่ว่าจะเป็นเรื่อง Payments, Chats, Orders หรือ Transactions ต่างๆที่ไหลเข้าระบบเรา โดยปกติจะเข้าระบบเราตรงๆ แต่เราจะใช้ Queue มาช่วยป้องกันการตกหล่นของ Messages เหล่านั้นโดยให้เข้า Queue ก่อน ซึ่งมันมีเจ้าต่างๆมากมายที่ให้บริการเรื่อง Queue โดยบทความนี้จะหยิบ Amazon Simple Queue Service (SQS) มาเล่า
Amazon Simple Queue Service (SQS) จะประกอบไปด้วย 2 ส่วน
Producer คือตัวจ่ายงานที่จะมาเรียง Queue ก่อนที่เราจะนำออกไปใช้โดยจะเป็นการจ่ายงานแบบ FIFO (First In First Out) โดยที่เข้าก่อนออกก่อน โดยผมจะมาทำให้ตัว API GATWAY ของ AWS เป็นเสมือน Producer ที่รับค่ามาจาก webhook หรือ api ต่างๆ
Consumer คือตัวรับงานจากตัว SQS โดยจะต้องมีการเขียน API ไป Pull Queue จาก SQS และส่งมอบไปยัง services ต่างๆของเราเมื่อทำ Queue นั้นเสร็จก็ควรจะลบ Queue นั้นไปด้วยเพื่อที่เมื่อมีการ Pull จะได้ไม่มีข้อมูลเดิมที่เราดึงจาก SQS
โดยบทความนี้จะกล่าวถึงแค่การทำ PRODUCER ก่อนไม่งั้นมันจะยาวผมจะแบ่งออกเป็น 2 PART เพื่อเป็นการไม่เสียเวลาต่อไปเราลองมาเริ่มทำกันเลยดีกว่า
- สร้าง SQS บน AWS
2.สร้าง Role ให้มีการเข้าถึงตัว SQS ได้ไปที่ IAM
3.สร้าง API GATEWAY เพื่อให้เชื่อมต่อ SQS ได้
****ถ้าเป็น fifo ให้ใส่แบบนี้แทน ถ้าทำแบบ standard ข้ามไปได้เลยหรือดูให้ผ่านตาได้ ต.ย. ตามด้านล่างนี้
ตัวอย่างก็ต้องส่ง json ให้ถูกต้อง เช่นในตัวอย่าง
คือ fifo มันต้องใส่ MessageGroupId,MessageDeduplicationId แนบไปด้วยมัน require เอาไว้แต่บทความนี้ทำบทความธรรมดา
จบไปแล้วขั้นติดตั้งให้ API GATEWAY เป็นตัว Producer มาลองทดสอบกันจริงๆดีกว่า
ผมลองเอาตัว API Gateway ไปวางที่ Webhook Line ตรงๆเลยไม่กรองอะไรทั้งนั้น
จานั้นรัวๆข้อความเข้าไปใน OA ที่เราทำการ Set Webhook ไป
เป็นการเทสง่ายๆแต่เห็นภาพมากเลยครับ
ก็จบไปแล้วกับบทความขั้นตอนการติดตั้ง SQS รวมไปถึงวิธีการ Producer ก็จะเห็นได้ว่าเราสามารถเอาไปพลิกแพลงได้มากเลยโดยที่ไม่ต้องกลัวข้อมูลจะตกหล่นหายเพราะส่วนใหญ่ที่หายเกิดจากหลายปัจจัยเช่น ยิงเข้า Server ต่างๆที่เราคิดว่ามัน Auto Scale แต่ฐานข้อมูลมันไม่ Scale ด้วยตัว SQS เลยเอามาแก้ปัญหานี้ได้ดีมากๆ , หรือข้อมูล Payment ที่ถูกส่งลงมาเราก็ควรเก็บไว้ใน Queue ก่อนไม่งั้น Server หรือฐานข้อมูลระเบิด ทำให้ Event Payment นั้นหายลูกค้าโวยวายแน่นอนถ้าเราจะกลับไปเช็คจาก Payment Gateway ที่เราใช้ลูกค้าคนนั้นอาจจะเลิกใช้เพราะความผิดพลาดตรงนี้ก็ได้
บทความหน้าจะเป็นการทำ Consumer ผ่าน Golang รอติดตามผลงานถัดไปได้นะครับ
( CR. ธำรงค์ ไชยวงค์ )