DeadLetterMonitor هي أداة تتعامل تلقائيًا، وفقًا لقواعد مخصصة، مع بعض الأخطاء التي يمكن أن تحدث في Pub/Sub Architectures.
أشياء مثل إعادة المحاولة بعد فترة توقف غير متوقعة على المستهلك، أو عدم تعيين البيانات المرجعية بشكل صحيح في الخدمة الوجهة، أو التكوين المفقود، وما إلى ذلك.
يطبق هذا المشروع خدمة مراقبة الرسائل الميتة البسيطة التي تستمع إلى جميع قوائم انتظار الرسائل الميتة التي تم تكوينها وتنفذ نمط إعادة المحاولة ونمط قاطع الدائرة.
وهو يطبق مجموعة من القواعد البسيطة التي تسمح بتحديد الرسائل التي يجب إعادة المحاولة لها، وعدد المرات، والتأخير بين عمليات إعادة المحاولة. سيتم حذف كافة الرسائل التي لم تتم إعادة محاولتها أو نقلها إلى مخزن "موقف السيارات" لتتم معالجتها يدويًا.
تتم معالجة جميع الرسائل ذات الحروف الميتة التي تتم معالجتها بواسطة محرك المراقبة بواسطة معالج عام، والذي، وفقًا لمجموعة من القواعد، سوف يتجاهل الرسالة أو يعيد محاولتها أو يرسلها إلى ساحة انتظار السيارات.
سيتم حذف كافة الرسائل التي تم تكوينها ليتم تجاهلها من قائمة الانتظار.
سيتم إرسال جميع الرسائل التي تم تكوينها لإعادة المحاولة إلى التبادل/الموضوع الأصلي، لتتم إعادة معالجتها بواسطة المشتركين الأصليين. سيتم تنفيذ إعادة المحاولة هذه باستخدام تأخير للتأكد من إصلاح المشكلات المؤقتة في البنية الأساسية بالفعل.
الرسائل المؤجلة : لإنشاء تأخير، سيتم نشر جميع الرسائل المطلوب إعادة المحاولة في 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 | الحد الأقصى لعدد مرات إعادة المحاولة لكل رسالة |
DeadLetterQuuees | أسماء قوائم الانتظار بالأحرف الميتة، مفصولة بفاصلة |
اسم التبادل المؤجل | اسم التبادل المؤجل - اسم التبادل للتعامل مع الرسائل المتأخرة |
DelayedQueueName | اسم قائمة الانتظار المؤجلة - اسم قائمة الانتظار لتلقي الرسائل المتأخرة |
DelayedDeadLetterExchangeName | اسم التبادل للحرف الميت المؤجل - اسم التبادل للتعامل مع الرسائل المتأخرة |
DelayedDeadLetterQueueName | اسم قائمة انتظار الأحرف الميتة المتأخرة - اسم قائمة الانتظار لتلقي الرسائل المتأخرة |
قيمة التأخير | الوقت بالثانية من التأخير قبل إرسال الرسالة مرة أخرى لإعادة المحاولة. |
ParkingLotExchangeName | اسم تبادل مواقف السيارات |
ParkingLotQueueName | اسم قائمة انتظار موقف السيارات |
قواعد | قائمة القواعد التي يجب تنفيذها في محرك المراقبة. يتم تطبيق كل قاعدة باستخدام مرشح مكون من قائمة OriginalExchange و MessageType و DeathReason . يتم فصل قائمة المرشحات بفاصلة. (على سبيل المثال، work.exchange1,Namespace.Abstractions.GenericEvent1,rejected1 - سيطبق عامل التصفية هذا القاعدة على رسالة من work.exchange1 مع نوع الرسالة Namespace.Abstractions وسبب الوفاة rejected1 ) |
القواعد: تجاهل | قائمة مرشحات الرسائل للرسائل التي سيتم تجاهلها. يتم حذف الرسائل التي تطابق معايير التصفية هذه تلقائيًا. |
القواعد: إعادة المحاولة | قائمة عوامل تصفية الرسائل التي ستتم إعادة محاولتها حتى يتم الوصول إلى MaxRetries . يتم إرسال الرسائل التي تطابق معايير التصفية هذه لإعادة المحاولة. |
القواعد: بارك | قائمة مرشحات الرسائل للرسائل التي سيتم إيقافها مباشرة. يتم إرسال الرسائل التي تطابق معايير التصفية هذه إلى موقف السيارات. |
يدعم المشروع حاليًا Azure Service Bus وRabbitMQ، اللذين يتم تنفيذهما ضمن مساحة الاسم *.Connectors
، لتحديد الموصل الذي سيتم استخدامه، في ملف AppSettings، قم بتعيين الخيار المناسب لـMessageBus ( AzureServiceBus
أو RabbitMQ
) والإعدادات ذات الصلة.
يرحب هذا المشروع بالمساهمات والاقتراحات.
يرجى الاطلاع على دليل المساهمة الخاص بنا للحصول على تعليمات كاملة حول كيفية المساهمة في DeadLetterMonitor.
اعتمد هذا المشروع قواعد السلوك الخاصة بشركة Microsoft مفتوحة المصدر. لمزيد من المعلومات، راجع الأسئلة الشائعة حول قواعد السلوك أو اتصل بـ [email protected] لطرح أي أسئلة أو تعليقات إضافية.