ข้ามไปยังเนื้อหาหลัก

การลองใหม่

Glasswall Halo ประกอบด้วยหลายบริการที่สื่อสารกันโดยใช้ข้อความแบบอะซิงโครนัสแทน HTTP สำหรับบริการเหล่านี้ เราได้พิจารณาเกี่ยวกับวิธีที่แพลตฟอร์มจัดการกับความล้มเหลวในกรณีที่เกิดข้อผิดพลาดระหว่างการประมวลผลข้อความ

Synchronous API และ Asynchronous API

API จะ subscribe ไปยัง response queue จาก Glasswall Engine อย่างไรก็ตาม ในกรณีที่เกิดความล้มเหลว ระบบจะส่งคืนการตอบกลับข้อผิดพลาดไปยัง http client

บริการ Engine

สถาปัตยกรรมเป็นแบบ request/response โดยใช้คิว reply-to ของ RabbitMQ ซึ่งหมายความว่าในกรณีที่เกิดความล้มเหลว เมื่อจัดการข้อความ เรายังคงส่งข้อความตอบกลับที่มีเหตุผลของความล้มเหลวอยู่

ตัวรวบรวมรายงาน

ตัวรวบรวมรายงานทำงานเป็นผู้ใช้ข้อความมาตรฐาน และมีการเพิ่มความสามารถพิเศษเพื่อรองรับการลองส่งข้อความใหม่ มีตัวเลือกการกำหนดค่าสองรายการอยู่ในบริการ

Retrymessages เป็นค่า bool ที่มีค่าเริ่มต้นเป็น true ซึ่งเปิดใช้ความสามารถในการลองส่งข้อความใหม่ หากปิดไว้ ข้อความที่ล้มเหลวทั้งหมดจะถูกส่งไปยัง dead letter queue ทันที

Messagettl เป็นจำนวนเต็มที่แสดงจำนวนวินาทีที่ข้อความสามารถอยู่ในคิวได้ ทั้งนี้เพื่อหลีกเลี่ยงไม่ให้ข้อความสะสมเนื่องจากมีข้อความที่ล้มเหลวและลองใหม่อย่างไม่สิ้นสุด เมื่อเวลาหมดอายุของข้อความสิ้นสุดลง ข้อความนั้นจะถูกส่งไปยัง dead letter queue ค่าเริ่มต้นในโค้ดคือ 30 วินาที

ความสามารถของตัวรวบรวมรายงานไม่ใช่ส่วนสำคัญต่อการที่ไคลเอนต์จะได้รับไฟล์ของตน และถูกใช้เพื่อสร้างข้อมูลรายงานแบบรวม ด้วยเหตุนี้ การส่งข้อความของตัวรวบรวมรายงานไปยัง dead letter จึงไม่ถือเป็นความล้มเหลวร้ายแรง และสามารถยอมรับ dead letters ได้ (เฉพาะในกรณีรุนแรงมากเท่านั้น)