نمط قاطع الدائرة
أوقفوا استدعاء الخدمات المتعطلة مؤقتًا
نمط قاطع الدائرة درس مجاني في C# Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C# Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C# Academy 4 دروس في المجموع.
المشكلة التي لا تستطيع إعادة المحاولة حلها
إذا كانت إحدى الاعتماديات متوقفة فعلًا، فإن إعادة محاولة كل طلب لا تؤدي إلا إلى زيادة الحمل وإبطاء تطبيقكم. يكتشف نمط قاطع الدائرة استمرار الفشل، ويتوقف عن استدعاء الخدمة المتعثرة لبعض الوقت.
الاقتباس من الإلكترونيات
كما يفصل القاطع الكهربائي لحماية الدائرة، «يفتح» هذا النمط بعد عدد كبير من حالات الفشل، ثم يختبر تلقائيًا ما إذا كانت الاعتمادية قد تعافت.
الحالات الثلاث
لقاطع الدائرة ثلاث حالات: مغلقة، حيث تمر الاستدعاءات بشكل طبيعي؛ ومفتوحة، حيث تُحظر الاستدعاءات فورًا؛ ونصف مفتوحة، حيث يختبر استدعاء تجريبي التعافي.
الحالة المغلقة
في الحالة المغلقة، تمر الطلبات وتتعقب Polly معدل الفشل. فإذا تجاوزت حالات الفشل الحد المحدد خلال نافذة أخذ العينات، ينتقل القاطع إلى الحالة المفتوحة.
الحالة المفتوحة
في الحالة المفتوحة، تقطع Polly الاستدعاء مباشرة؛ إذ تُلقي BrokenCircuitException فورًا من دون استدعاء الاعتمادية، مما يمنحها فرصة للتعافي ويؤدي إلى فشل سريع لدى المستدعين.
try
{
await pipeline.ExecuteAsync(token => CallServiceAsync(token));
}
catch (BrokenCircuitException)
{
// circuit is open, fail fast
}الحالة نصف المفتوحة
بعد انقضاء مدة الفصل، ينتقل القاطع إلى الحالة نصف المفتوحة ويسمح بطلب تجريبي. يؤدي النجاح إلى إغلاق الدائرة، بينما يعيدها الفشل إلى الحالة المفتوحة لفترة فصل أخرى.
تهيئة القاطع
تستخدم Polly v8 النوع CircuitBreakerStrategyOptions. ومن إعداداته الأساسية: FailureRatio، مثل 0.5 أي 50%، وMinimumThroughput، وSamplingDuration، وBreakDuration.
using Polly.CircuitBreaker;
var pipeline = new ResiliencePipelineBuilder()
.AddCircuitBreaker(new CircuitBreakerStrategyOptions
{
FailureRatio = 0.5,
MinimumThroughput = 10,
SamplingDuration = TimeSpan.FromSeconds(30),
BreakDuration = TimeSpan.FromSeconds(15)
})
.Build();FailureRatio وMinimumThroughput
تمثل FailureRatio نسبة حالات الفشل التي تؤدي إلى فصل القاطع. ويضمن MinimumThroughput ألا يفصل القاطع إلا بعد عدد كافٍ من الاستدعاءات، حتى لا تؤدي حالة فشل مبكرة واحدة إلى فتحه قبل الأوان.
التفاعل مع تغيّرات الحالة
استخدموا استدعاءات OnOpened وOnClosed وOnHalfOpened لتسجيل الانتقالات أو إطلاق التنبيهات عند تدهور إحدى الاعتماديات.
new CircuitBreakerStrategyOptions
{
FailureRatio = 0.5,
OnOpened = args =>
{
Console.WriteLine($"Circuit opened for {args.BreakDuration}");
return default;
}
};الدمج مع إعادة المحاولة
تكمل إعادة المحاولة وقاطع الدائرة إحداهما الأخرى: تعالج إعادة المحاولة الاضطرابات القصيرة، بينما يوقف القاطع إعادة المحاولة عند استمرار الفشل. ويكتسب الترتيب أهمية، وسنعود إلى ذلك في درس خطوط الأنابيب.
التحكم اليدوي
يمكنكم الاحتفاظ بكائن CircuitBreakerManualControl لعزل القاطع، أي إجباره على الفتح، أو إغلاقه يدويًا، وهو أمر مفيد أثناء نوافذ الصيانة.
var manualControl = new CircuitBreakerManualControl();
await manualControl.IsolateAsync(); // force open
await manualControl.CloseAsync(); // force closedتحقق سريع
اختبروا نمط قاطع الدائرة.
مراجعة
يحمي قاطع الدائرة الاعتماديات المتعثرة من خلال الانتقال بين الحالات المغلقة والمفتوحة ونصف المفتوحة. وفي Polly v8، تتحكم AddCircuitBreaker مع FailureRatio وMinimumThroughput وSamplingDuration وBreakDuration في فصل القاطع. تُلقي الحالة المفتوحة BrokenCircuitException لتحقيق فشل سريع، كما تتيح الاستدعاءات والتحكم اليدوي مراقبة الحالة وتجاوزها.
الأسئلة الشائعة
هل درس «نمط قاطع الدائرة» مجاني؟
نعم — نص درس «نمط قاطع الدائرة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C# Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C# Academy 4 دروس في المجموع.
ماذا ستتعلم في «نمط قاطع الدائرة»؟
أوقفوا استدعاء الخدمات المتعطلة مؤقتًا تتمرن على C# Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C# Academy؟
لا تُشترط خبرة سابقة. C# Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «نمط قاطع الدائرة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C# Academy هذا؟
نعم. كل درس في C# Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- سياسات إعادة المحاولة
- نمط قاطع الدائرة
- سياسات المهلة والقيم البديلة
- مسارات المرونة