DeadLetterMonitor เป็นเครื่องมือที่จะจัดการโดยอัตโนมัติตามกฎที่กำหนดเอง โดยมีข้อผิดพลาดบางอย่างที่อาจเกิดขึ้นในสถาปัตยกรรม Pub/Sub
สิ่งต่างๆ เช่น ลองใหม่อีกครั้งหลังจากเวลาหยุดทำงานที่ไม่คาดคิดกับผู้บริโภค ข้อมูลอ้างอิงไม่ได้รับการตั้งค่าอย่างถูกต้องในบริการปลายทาง การกำหนดค่าหายไป ฯลฯ
โปรเจ็กต์นี้ใช้บริการ Dead Letter Monitor แบบธรรมดาที่รับฟังคิวจดหมายที่ไม่ทำงานที่กำหนดค่าไว้ทั้งหมด และดำเนินการรูปแบบ Retry และรูปแบบเซอร์กิตเบรกเกอร์
โดยจะใช้ชุดกฎง่ายๆ ที่ช่วยให้คำจำกัดความของข้อความที่ควรลองอีกครั้ง จำนวนครั้ง และความล่าช้าระหว่างการลองใหม่ ข้อความทั้งหมดที่ไม่ได้ลองใหม่จะถูกลบหรือย้ายไปยังที่เก็บข้อมูล "ลานจอดรถ" เพื่อดำเนินการด้วยตนเอง
ข้อความตัวอักษรที่เสียทั้งหมดที่ประมวลผลโดยกลไกการตรวจสอบจะได้รับการจัดการโดยตัวจัดการทั่วไปซึ่งจะทิ้ง ลองใหม่อีกครั้ง หรือส่งข้อความไปยังลานจอดรถตามกฎชุดหนึ่ง
ข้อความทั้งหมดที่กำหนดค่าให้ทิ้งจะถูกลบออกจากคิว
ข้อความทั้งหมดที่กำหนดค่าให้ลองอีกครั้งจะถูกส่งไปยังการแลกเปลี่ยน/หัวข้อเดิม เพื่อให้สมาชิกเดิมประมวลผลใหม่ การลองใหม่นี้จะดำเนินการโดยใช้ความล่าช้าเพื่อให้แน่ใจว่าปัญหาชั่วคราวในโครงสร้างพื้นฐานได้รับการแก้ไขแล้ว
ข้อความล่าช้า : หากต้องการสร้างความล่าช้า ข้อความทั้งหมดที่จะลองอีกครั้งจะถูกโพสต์ใน delayed exchange and queue
ซึ่งเป็นเพียงคิวที่มีการตั้งค่า TTL
เมื่อข้อความล่าช้า TTL หมดอายุ ข้อความจะถูกส่งไปยัง Delayed Deadletter exchange and queue
ที่มีตัวจัดการเฉพาะที่จะส่งข้อความไปยังคิวเดิมทันที
การกำหนดค่าทั้งหมดจะถูกเก็บไว้ในไฟล์ appsettings.json
"DeadLetterMonitor": {
"MaxRetries": 2,
"DeadLetterQueues": "deadletter.queue",
"DelayedExchangeName": "delayed.exchange",
"DelayedQueueName": "delayed.queue",
"DelayedDeadLetterExchangeName": "delayed.deadletter.exchange",
"DelayedDeadLetterQueueName": "delayed.deadletter.queue",
"ParkingLotExchangeName": "parkinglot.exchange",
"ParkingLotQueueName": "parkinglot.queue",
"DelayValue": 10000,
"Rules": {
"Discard": "work.exchange1,Namespace.Abstractions.GenericEvent1,rejected1",
"Retry": "work.exchange,Namespace.Abstractions.GenericEvent,rejected",
"Park": "work.exchange1,Namespace.Abstractions.GenericEvent1,rejected1"
}
}
คุณสมบัติ | คำอธิบาย |
---|---|
MaxRetries | จำนวนครั้งสูงสุดในการลองใหม่ต่อข้อความ |
DeadLetterQuues | ชื่อคิวอักษรที่ไม่ทำงาน คั่นด้วยเครื่องหมายจุลภาค |
ล่าช้าExchangeName | ชื่อ Exchange ที่ล่าช้า - ชื่อของการแลกเปลี่ยนเพื่อจัดการข้อความที่ล่าช้า |
ชื่อคิวล่าช้า | ชื่อคิวล่าช้า - ชื่อของคิวเพื่อรับข้อความล่าช้า |
DelayedDeadLetterExchangeName | ชื่อการแลกเปลี่ยนจดหมายที่ล่าช้าล่าช้า - ชื่อของการแลกเปลี่ยนเพื่อจัดการข้อความล่าช้า |
ล่าช้าDeadLetterQueueName | ชื่อคิวจดหมายที่ล่าช้าล่าช้า - ชื่อของคิวเพื่อรับข้อความล่าช้า |
ค่าความล่าช้า | เวลาเป็นวินาทีก่อนที่จะส่งข้อความกลับไปเพื่อลองอีกครั้ง |
ที่จอดรถแลกเปลี่ยนชื่อ | ชื่อแลกลานจอดรถ |
ที่จอดรถคิวชื่อ | ชื่อคิวลานจอดรถ |
กฎ | รายการกฎที่ต้องใช้ในกลไกมอนิเตอร์ แต่ละกฎจะถูกนำไปใช้โดยใช้ตัวกรองที่ประกอบด้วยรายการ OriginalExchange a MessageType และ DeathReason รายการตัวกรองคั่นด้วยเครื่องหมายจุลภาค (เช่น work.exchange1,Namespace.Abstractions.GenericEvent1,rejected1 - ตัวกรองนี้จะใช้กฎกับข้อความจาก Exchange work.exchange1 ด้วย Message Type of Namespace.Abstractions และ DeathReason เป็น rejected1 ) |
กฎ: ทิ้ง | รายการตัวกรองข้อความของข้อความที่จะทิ้ง ข้อความที่ตรงกับเกณฑ์ตัวกรองนี้จะถูกลบโดยอัตโนมัติ |
กฎ: ลองอีกครั้ง | รายการตัวกรองข้อความของข้อความที่จะลองอีกครั้งจนกว่าจะถึง MaxRetries ข้อความที่ตรงกับเกณฑ์ตัวกรองนี้จะถูกส่งเพื่อลองอีกครั้ง |
กฎ: ปาร์ค | รายการตัวกรองข้อความของข้อความที่จะจอดโดยตรง ข้อความที่ตรงกับเกณฑ์ตัวกรองนี้จะถูกส่งไปยังลานจอดรถ |
ขณะนี้โปรเจ็กต์รองรับ Azure Service Bus และ RabbitMQ ซึ่งใช้งานภายใต้เนมสเปซ *.Connectors
สำหรับการระบุตัวเชื่อมต่อที่จะใช้ในไฟล์ AppSettings ให้ตั้งค่าตัวเลือกที่เหมาะสมสำหรับ MessageBus ( AzureServiceBus
หรือ RabbitMQ
) และการตั้งค่าที่เกี่ยวข้อง
โครงการนี้ยินดีรับการสนับสนุนและข้อเสนอแนะ
โปรดดูคู่มือการมีส่วนร่วมของเราสำหรับคำแนะนำทั้งหมดเกี่ยวกับวิธีที่คุณสามารถมีส่วนร่วมกับ DeadLetterMonitor
โครงการนี้ได้นำหลักจรรยาบรรณของ Microsoft Open Source มาใช้ สำหรับข้อมูลเพิ่มเติม โปรดดูคำถามที่พบบ่อยเกี่ยวกับจรรยาบรรณหรือติดต่อ [email protected] หากมีคำถามหรือความคิดเห็นเพิ่มเติม