0Pricing
C# Academy · درس

إنتاج الرسائل واستهلاكها

أرسلوا الرسائل وعالجوها باستخدام MassTransit

إنتاج الرسائل واستهلاكها درس مجاني في C# Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C# Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C# Academy 4 دروس في المجموع.

تسجيل MassTransit

هيّئوا MassTransit في DI: سجّلوه، ووجّهوه إلى ناقل، وهو RabbitMQ هنا، ودعوه يكتشف المستهلكين لديكم.

builder.Services.AddMassTransit(x =>
{
    x.AddConsumers(typeof(Program).Assembly);
    x.UsingRabbitMq((context, cfg) =>
    {
        cfg.Host("localhost");
        cfg.ConfigureEndpoints(context);
    });
});

تعريف المستهلك

يطبّق المستهلك IConsumer<T> لنوع الرسالة التي يعالجها. توجد منطقية المعالجة لديك داخل Consume، التي تستقبل ConsumeContext<T>.

public class OrderPlacedConsumer : IConsumer<OrderPlaced>
{
    public async Task Consume(ConsumeContext<OrderPlaced> context)
    {
        OrderPlaced message = context.Message;
        // handle the event
    }
}

نشر حدث

احقن IPublishEndpoint واستدعِ Publish لبثّ حدث إلى جميع المشتركين.

public class OrderService
{
    private readonly IPublishEndpoint _publish;
    public OrderService(IPublishEndpoint publish) => _publish = publish;

    public Task PlaceOrderAsync(Guid id, string email) =>
        _publish.Publish(new OrderPlaced(id, email));
}

إرسال أمر

تُرسل الأوامر إلى نقطة نهاية محددة. احصل على ISendEndpoint للوجهة ثم استدعِ Send.

var endpoint = await _sendProvider
    .GetSendEndpoint(new Uri("queue:charge-payment"));
await endpoint.Send(new ChargePayment(orderId, amount));

مراجعة Publish مقابل Send

يُستخدم Publish للأحداث ويصل إلى كل مستهلك مشترك، بينما يُستخدم Send للأوامر ويستهدف قائمة انتظار واحدة. ويحدد الاختيار الصحيح سلوك التوجيه لديك.

إمكانات ConsumeContext

يوفّر ConsumeContext أكثر من الرسالة نفسها: معرّفات الارتباط والترويسات، وإمكانية النشر أو إرسال الاستجابة من داخل المستهلك، مما يتيح تسلسل الرسائل.

public async Task Consume(ConsumeContext<OrderPlaced> context)
{
    await context.Publish(new InvoiceRequested(context.Message.OrderId));
}

الطلب والاستجابة

يدعم MassTransit أيضًا نمط الطلب والاستجابة عبر المراسلة. يرسل عميل الطلب طلبًا وينتظر استجابة ذات نوع محدد، وهذا مفيد عندما تحتاج إلى إجابة مع الحفاظ على فك الاقتران عن وسيط الرسائل.

var response = await _client
    .GetResponse<OrderStatus>(new GetOrder(orderId));
OrderStatus status = response.Message;

تسمية نقاط النهاية

تسمّي ConfigureEndpoints نقطة استقبال (قائمة انتظار) تلقائيًا لكل مستهلك باستخدام الاصطلاحات. ويمكنك تخصيص الأسماء باستخدام المنسّقات أو الإعداد الصريح عند الحاجة.

تسلسل الرسائل

يُسلسل MassTransit الرسائل بصيغة JSON افتراضيًا، ويضمّن بيانات وصفية مثل نوع الرسالة ومعرّفاتها. ويتشارك المنتجون والمستهلكون أنواع عقود الرسائل، وغالبًا ما تكون هذه الأنواع في حزمة مشتركة.

التزامن

يمكن للمستهلك معالجة العديد من الرسائل بالتوازي. اضبط PrefetchCount وحدود التزامن لتحقيق توازن بين معدل المعالجة والقدرة الاستيعابية للخدمات التابعة.

cfg.ReceiveEndpoint("orders", e =>
{
    e.PrefetchCount = 16;
    e.ConcurrentMessageLimit = 8;
    e.ConfigureConsumer<OrderPlacedConsumer>(context);
});

اختبار المستهلكين

يوفّر MassTransit أداة اختبار تعمل داخل الذاكرة، بحيث يمكنك نشر رسالة والتحقق من أن مستهلكًا عالجها، من دون الحاجة إلى وسيط رسائل حقيقي.

تحقق سريع

اختبر إنتاج الرسائل واستهلاكها.

مراجعة

سجّل MassTransit باستخدام AddMassTransit ووسيلة نقل وConfigureEndpoints. يطبّق المستهلكون IConsumer<T> مع أسلوب Consume. استخدم IPublishEndpoint.Publish للأحداث (لجميع المشتركين)، وISendEndpoint.Send للأوامر (لقائمة انتظار واحدة). يتيح ConsumeContext تسلسل الرسائل والطلب والاستجابة، بينما تتحقق أداة الاختبار من المستهلكين داخل الذاكرة.

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

هل درس «إنتاج الرسائل واستهلاكها» مجاني؟

نعم — نص درس «إنتاج الرسائل واستهلاكها» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C# Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C# Academy 4 دروس في المجموع.

ماذا ستتعلم في «إنتاج الرسائل واستهلاكها»؟

أرسلوا الرسائل وعالجوها باستخدام MassTransit تتمرن على C# Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C# Academy؟

لا تُشترط خبرة سابقة. C# Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «إنتاج الرسائل واستهلاكها»؟

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

هل يمكنني كتابة وتشغيل أكواد في درس C# Academy هذا؟

نعم. كل درس في C# Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

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

  1. مفاهيم المراسلة
  2. إنتاج الرسائل واستهلاكها
  3. Saga ومسارات العمل
  4. معالجة الأخطاء وإعادة المحاولة
← العودة إلى C# Academy