Saga ومسارات العمل
نسّقوا العمليات طويلة الأمد
Saga ومسارات العمل درس مجاني في C# Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C# Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C# Academy 4 دروس في المجموع.
تنسيق سير العمل طويل الأمد
تمتد بعض عمليات الأعمال عبر رسائل وخطوات متعددة بمرور الوقت: وضع الطلب، وتحصيل الدفع، وحجز المخزون، والشحن. تنسّق saga سير العمل طويل الأمد هذا، وتتتبع حالته عبر الرسائل.
ما المقصود بـ Saga؟
إن saga مستهلك يحتفظ بالحالة. فهي تربط الرسائل ذات الصلة، وتحتفظ بالحالة الحالية لسير العمل، وتتفاعل مع الأحداث بالانتقال بين الحالات حتى تكتمل العملية.
Saga باستخدام آلة حالات
يصمّم MassTransit وحدات saga على هيئة آلات حالات باستخدام MassTransitStateMachine. وتعرّف الحالات والأحداث والانتقالات بأسلوب تصريحي.
dotnet add package MassTransit
// state machine sagas are built inحالة Saga
الحالة هي فئة تطبّق SagaStateMachineInstance. وتحمل CorrelationId بالإضافة إلى أي بيانات تحتاج إلى تذكّرها بين الخطوات.
public class OrderState : SagaStateMachineInstance
{
public Guid CorrelationId { get; set; }
public string CurrentState { get; set; }
public decimal Amount { get; set; }
}تعريف الحالات والأحداث
تعرّف داخل آلة الحالات خصائص State وخصائص Event التي ترتبط بأنواع الرسائل.
public class OrderSaga : MassTransitStateMachine<OrderState>
{
public State AwaitingPayment { get; private set; }
public State Completed { get; private set; }
public Event<OrderPlaced> OrderPlaced { get; private set; }
public Event<PaymentReceived> PaymentReceived { get; private set; }
}الربط
يجب ربط كل حدث بنسخة saga الصحيحة، وعادةً ما يتم ذلك باستخدام معرّف مشترك مثل OrderId. وبذلك تُوجّه الرسائل الواردة إلى سير العمل الصحيح الجاري تنفيذه.
Event(() => PaymentReceived, e =>
e.CorrelateById(m => m.Message.OrderId));تعريف الانتقالات
يربط المُنشئ السلوكيات: إذ ينشئ الحدث الأولي النسخة، ويخزّن البيانات، وينقلها إلى الحالة التالية.
Initially(
When(OrderPlaced)
.Then(ctx => ctx.Saga.Amount = ctx.Message.Amount)
.TransitionTo(AwaitingPayment));الاستجابة داخل حالة
استخدم During لمعالجة الأحداث الصالحة في حالة معينة فقط، ثم انشر الرسائل اللاحقة وانتقل إلى الحالة التالية.
During(AwaitingPayment,
When(PaymentReceived)
.Publish(ctx => new OrderConfirmed(ctx.Saga.CorrelationId))
.TransitionTo(Completed)
.Finalize());حفظ حالة Saga
يجب أن تبقى حالة saga محفوظة بعد إعادة التشغيل، لذلك تُخزّن في مستودع مثل Entity Framework أو MongoDB أو Redis أو غيرها. ويحمّل MassTransit النسخة ويحفظها حول معالجة كل رسالة.
x.AddSagaStateMachine<OrderSaga, OrderState>()
.EntityFrameworkRepository(r =>
{
r.ExistingDbContext<OrderDbContext>();
});المهلات باستخدام الجدولة
يمكن لوحدات saga جدولة مهلة، مثل إلغاء الطلب إذا لم يُستلم الدفع خلال 30 دقيقة، باستخدام Schedule، ثم معالجة حدث انتهاء المهلة لتنفيذ التعويض.
التعويض
إذا فشلت خطوة لاحقة، يمكن لـ saga تنفيذ إجراءات تعويضية للتراجع عن الخطوات السابقة، مثل ردّ المبلغ المحصّل وتحرير المخزون، مما يحافظ على اتساق العملية ككل من دون معاملات موزعة.
تحقق سريع
اختبر وحدات saga وسير العمل.
مراجعة
تنسّق saga سير العمل طويل الأمد بصفتها مستهلكًا مرتبطًا يحتفظ بالحالة. يستخدم MassTransit MassTransitStateMachine مع حالة من نوع SagaStateMachineInstance، وأعضاء State/Event معلنة، وربطًا بالمعرّف، وانتقالات عبر Initially/During. تُحفظ الحالة في مستودع، وتستخدم المهلات الجداول الزمنية، بينما يلغي التعويض الخطوات السابقة عند الفشل.
الأسئلة الشائعة
هل درس «Saga ومسارات العمل» مجاني؟
نعم — نص درس «Saga ومسارات العمل» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C# Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C# Academy 4 دروس في المجموع.
ماذا ستتعلم في «Saga ومسارات العمل»؟
نسّقوا العمليات طويلة الأمد تتمرن على C# Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C# Academy؟
لا تُشترط خبرة سابقة. C# Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «Saga ومسارات العمل»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C# Academy هذا؟
نعم. كل درس في C# Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- مفاهيم المراسلة
- إنتاج الرسائل واستهلاكها
- Saga ومسارات العمل
- معالجة الأخطاء وإعادة المحاولة