การลองใหม่
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 ได้ (เฉพาะในกรณีรุนแรงมากเท่านั้น)