0Pricing
Microservices Communication Patterns (Saga, Circuit Breaker) · درس

بناء مستهلكي أحداث قابلين للتنفيذ المتكرر

اجعل المشاركين في saga ذات التوجيه الذاتي آمنين ضد الأحداث المكررة وغير المرتبة باستخدام المستهلكين القابلين للتنفيذ المتكرر ونمط صندوق الوارد ونمط صندوق الصادر.

بناء مستهلكي أحداث قابلين للتنفيذ المتكرر درس مجاني في Microservices Communication Patterns (Saga, Circuit Breaker) على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Microservices Communication Patterns (Saga, Circuit Breaker)، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Microservices Communication Patterns (Saga, Circuit Breaker) 4 دروس في المجموع.

بعض أجزاء هذا الدرس لم تُترجم بعد وتظهر باللغة الإنجليزية.

Events Get Redelivered

In a choreography saga, services react to events from a broker. Brokers deliver at least once, so the same event can arrive twice — and sometimes out of order. Naive handlers double-charge or double-ship.

The Goal: Idempotent Consumers

An idempotent consumer can process the same event repeatedly with no extra effect. This is essential for correctness in any event-driven saga.

Track Processed Event Ids

Give every event a unique id. Before handling, check whether you have already processed that id; if so, skip and acknowledge.

if (inbox.exists(event.id())) { ack(); return; }
handle(event);
inbox.save(event.id());
ack();

The Inbox Pattern

The inbox pattern stores processed event ids in a table inside the same database transaction as the business change. Insert + work commit together, so a redelivery is rejected by the unique constraint.

BEGIN;
  INSERT INTO inbox(event_id) VALUES (?); -- unique
  UPDATE orders SET status = 'PAID' WHERE id = ?;
COMMIT;

Why Atomicity Is Key

If you ack the event but crash before committing the business change, the work is lost. Doing both in one transaction guarantees they succeed or fail together.

The Dual-Write Problem

A participant must often update its DB and publish a new event. Doing these as two separate calls risks one succeeding and the other failing — the classic dual-write problem.

The Outbox Pattern

The outbox pattern solves it: write the outgoing event into an outbox table in the same transaction as the business change. A separate relay publishes from the outbox to the broker.

BEGIN;
  UPDATE orders SET status = 'SHIPPED' WHERE id = ?;
  INSERT INTO outbox(payload) VALUES (?);
COMMIT;

Relaying the Outbox

A poller or change-data-capture (CDC) tool like Debezium reads new outbox rows and publishes them, then marks them sent. Publishing is at-least-once, so downstream consumers must be idempotent too.

Handling Out-of-Order Events

Events may arrive out of order. Use version numbers or sequence ids and ignore stale events, or design handlers that converge to the correct state regardless of order.

if (event.version() <= current.version()) return; // stale

Compensations Must Be Idempotent Too

When a saga fails, compensating events also flow through the broker and can be redelivered. A compensation (e.g. refund) must itself be idempotent, or you refund twice.

Putting It Together

A robust choreography participant: consume via the inbox (dedup), do work and write the outbox in one transaction, relay the outbox to the broker, and make every handler — including compensations — idempotent.

Quick Check

Test your event-consumer knowledge.

Recap

You hardened choreography consumers:

  • Brokers deliver at-least-once, so events repeat and may reorder
  • Idempotent consumers process duplicates safely
  • The inbox pattern dedups within the business transaction
  • The outbox pattern solves the dual-write problem; a relay/CDC publishes it
  • Handle out-of-order events and make compensations idempotent too

الأسئلة الشائعة

هل درس «بناء مستهلكي أحداث قابلين للتنفيذ المتكرر» مجاني؟

نعم — نص درس «بناء مستهلكي أحداث قابلين للتنفيذ المتكرر» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Microservices Communication Patterns (Saga, Circuit Breaker)، انتقل إلى CoddyKit PRO. تتضمن دورة Microservices Communication Patterns (Saga, Circuit Breaker) 4 دروس في المجموع.

ماذا ستتعلم في «بناء مستهلكي أحداث قابلين للتنفيذ المتكرر»؟

اجعل المشاركين في saga ذات التوجيه الذاتي آمنين ضد الأحداث المكررة وغير المرتبة باستخدام المستهلكين القابلين للتنفيذ المتكرر ونمط صندوق الوارد ونمط صندوق الصادر. تتمرن على Microservices Communication Patterns (Saga, Circuit Breaker) مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Microservices Communication Patterns (Saga, Circuit Breaker)؟

لا تُشترط خبرة سابقة. Microservices Communication Patterns (Saga, Circuit Breaker) على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «بناء مستهلكي أحداث قابلين للتنفيذ المتكرر»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Microservices Communication Patterns (Saga, Circuit Breaker) هذا؟

نعم. كل درس في Microservices Communication Patterns (Saga, Circuit Breaker) يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. تصميم Sagas مدفوعة بالأحداث
  2. ناقل الأحداث ووسطاء الرسائل
  3. التعامل مع التعويض باستخدام الأحداث
  4. بناء مستهلكي أحداث قابلين للتنفيذ المتكرر
← العودة إلى Microservices Communication Patterns (Saga, Circuit Breaker)