تكرار السؤال: …
الإجابة المختصرة
يراقب فشل الاتصال بالخدمات الخارجية؛ فإذا تجاوزت الأخطاء حداً معيناً يفتح الدائرة ويفشل الطلبات فوراً دون إرسالها، مانعاً استنزاف موارد السيرفر.
الشرح
إذا توقفت خدمة خارجية (كخدمة مدفوعات)، فإن محاولة مئات الطلبات الاتصال بها وانتظار الـ timeouts سيؤدي لاستنزاف كامل اتصالات وذاكرة تطبيقك وانهياره بالكامل. يمر نمط قاطع الدائرة (باستخدام مكتبات مثل opossum) بثلاث حالات: Closed (طبيعي)، Open (يرد فوراً بفشل أو Fallback دون اتصال)، وHalf-Open (يختبر عودة الخدمة بطلبات تجريبية قليلة).
مثال بالكود
import CircuitBreaker from "opossum";
const breaker = new CircuitBreaker(callExternalApi, { timeout: 3000, errorThresholdPercentage: 50 });
breaker.fallback(() => ({ status: "cached_fallback" }));
const result = await breaker.fire();أخطاء شائعة
- عدم توفير مسار استجابة بديل (Fallback) واضح عند فتح الدائرة.