มาทำ Queue ผ่าน SQS ของ AWS กัน Part Producer+Consumer End

FLOW การทำงานของ SQS ในบทความนี้

จากบทความเดิมที่แล้วได้ทำส่วนของ Producer ไปวันนี้จะมาพูดของส่วนตัว Consumer สามารถดูบทความเกี่ยวกับ Producer ได้ที่นี่กดเลย

สิ่งที่ต้องทำมาก่อนเริ่มบทความนี้

  1. สร้างตัว SQS
  2. สร้าง Role ให้ตัว API Gateway เข้าถึง SQS ได้
  3. ทำ API Gateway

หลังจากเราทำตัว Producer เรียบร้อยแล้วมาเริ่มขั้นตอนการทำ Consumer ได้เลย

  1. ไปที่ IAM เพื่อที่จะสร้าง User ไว้สำหรับเอา Token มาใช้ให้ตัว Backend มีการเข้าถึง SQS
มาสร้าง Permission ที่ Policy ก่อน
Coppy ไปใส่และทำการเปลี่ยน ARN เป็น SQS ของตัวเอง
กลับไปเอา ARN ได้ที่ในภาพได้เลย
ทำการตั้งชื่อให้เรียบร้อยและให้เราเข้าใจ
ได้ policy มาเรียบร้อยจากนั้นไปสร้าง User กัน
กดสร้าง User ได้เลย
ใส่ชื่อให้รู้มาดูทีหลังจะได้ไม่งงแล้วกด Next ไปได้เลย
ทำการ Check Policy ที่เราสร้างแล้วกดต่อไปได้เลย
เราก็จะได้ User มาแต่ยังไม่เสร็จเราต้องไปสร้าง Token เพื่อเอาออกมาใช้
คลิกเข้ามาแล้วมาที่ Security credentials แล้วไปที่ Access Keys แล้วกดสร้าง
ผมเลือก Local เนื่องจากผมจะเอามา Dev บน Local ให้มีสิทเข้าถึง SQS เลือกให้ถูกวัตถุประสงค์จริงๆเลือก Others ก็ได้เราอาจจะไปใช้ทุกที่ที่กล่าวมา
ทำการเก็บ key ไว้ใน note ให้เรียบร้อย

2.ต่อไปก็จะเป็นการ Code โดยผมจะใช้ Golang เพื่อมาทำ Consumer หรือ Poll เพื่อส่งไปที่ต่างๆ

สิ่งที่ต้องเตรียม

  1. file .env

โดยข้างใน ENV จะประกอบไปด้วย

TOKEN , SECRET จากที่เราสร้างไปเมื่อซักครู่ REGION ก็น่าจะ ap-southeast-1 กันอยู่แล้วนอกจากจะไม่ได้อยู่ไทย PORT เลือกตามใจชอบ URL_SQS ไปเอาที่ตัว SQS ได้เลย ส่วน URL GATEWAY ก็ไปเอาที่เราสร้างเมื่อตอนบทความเดิมคลิก

มาดูส่วนของ Source Code กันจะอธิบายไปเป็นส่วนๆกันนะครับ

ส่วนนี้เหมือนบทความเดิมคือตัว Producer แต่จากเรายิงไปตรงๆเราจะให้มาผ่าน API แล้วยิงเข้าไป

ส่วนนี้คือตัว Connect SQS โดยเราใช้ได้เซทค่าต่างๆใน .env เรียบร้อยแล้ว

ส่วนนี้คือตัว Poll Message ลงมาจาก SQS โดน QueryUrl คือ Path ตัส SQS
ส่วน MaxNumberOfMessages คือเราจะอนุญาติให้ดึง Queue มามากสุดได้เท่าไหร่ซึ่ง MAX ที่ 10

ส่วนตัวนี้คือตัวลบ Message หลังจากเรา Get Message แล้วทำอะไรกับมันเสร็จก็ลบออกจาก Queue ได้เลย

ส่วนนี้เป็น API ที่เราจะทำ Producer เพื่อส่ง Message ไปเก็บใน Queue โดยจะสมมุติว่าให้ API เส้นนี้เป็น Webhook ที่รับ Transactions จาก Payment

ส่วนนี้เป็น API ที่เราจะทำ Producer เพื่อส่ง Message ไปเก็บใน Queue โดยจะสมมุติว่าให้ API เส้นนี้เป็น Webhook ที่รับได้จาก event อะไรก็ได้ไม่ว่าจะสร้างขึ้นมาเพื่อให้เห็นถึงความแตกต่างว่า Producer เส้นเดียวจะให้มันมีกี่ Message กี่แบบในนั้นก็ได้ แต่ถ้าต่างกันเกินไปควรแยกเส้น SQS นะครับ

ส่วนตัวนี้ตรงๆเลยคือ API Consumer ดึงค่าจากตัว SQS โดยจะเห็นว่าจะมีการ ConnectSQS() ก่อน จากนั้นก็จะใช้ While loop และจะมีการไปดึง ConsumerMessage() หลังจากนั้นก็จะมา for loop message ว่าได้ออกมาเท่าไหร่ และจะทำการ Check Type ว่า Type อะไรแล้วอยากให้ทำอะไรหรือให้ไป Function ไหนก็ใส่ไปได้เลย หลังจาก ทำเสร็จก็จะทำการลบ Message ออกจาก Queue

ลองมา Run แล้วดูที่ผม Print ไว้ดีกว่าครับ

ทำการทดสอบยิงตัวเก็บ Queue Payment
พอดีผมไม่ได้ return ค่ามาแสดงแต่ print ไว้เลย cap มาให้ดู
ทำการทดสอบยิงตัวเก็บ Queue Event
มีการยิง Payment , กับ Event ไปในเก็บไว้ใน Queue
จากนั้นจะยิงตัว consumer เพื่อดึง Queue มาทำอะไรแล้วก็ Delete มันออก
เมื่อดึง Queue ออกมาจากที่เรา Print ก็จะเห็น Message 2 แบบ แล้วเราก็ทำการลบเพราะไม่ได้เอาใช้ทำอะไรต่อ

ก็จบไปแล้วนะครับสำหรับเรื่อง Queue ส่วนตัวที่ใช้ SQS เพราะบริษัทใช้ AWS เป็นหลักแต่หลักการทำงานของแต่ละเจ้าก็จะคล้ายๆ หรือ เหมือนกันหมด โดยบทความนี้น่าจะเป็นประโยชน์ไม่มากก็น้อยหวังว่าทุกคนจะเอาไปพลิกแพลงใช้ได้สนุกและหลากหลายนะครับ ข้างต้นเป็นวิธีเขียนวิธีนึงเท่านั้นนะครับเพื่อให้เห็นภาพ

ขอให้ชีวิต Dev มีแต่ความสุขครับอย่าไปเครียด เมื่อมีความเครียดจะ Dev ไม่สนุกอีกต่อไปเคยผ่านมาแล้ว ….คำคมก็มา 555555

รอติดตามผลงานต่อไปได้เลยนะครับ

บทความเดิมที่แล้ว

( CR. ธำรงค์ ไชยวงค์ )

--

--

No responses yet