MassTransit لـ C# (.NET): دليل شامل مع أمثلة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

MassTransit لـ C# (.NET): دليل شامل مع أمثلة

1. ما هي MassTransit ولماذا تحتاجها؟

MassTransit هي مكتبة مفتوحة المصدر وقوية تُستخدم على نطاق واسع لبناء التطبيقات الموزعة على منصة .NET. توفر طبقة تجريد عالية المستوى فوق أنظمة وساطة الرسائل (message brokers) المختلفة مثل RabbitMQ و Azure Service Bus و Amazon SQS/SNS و ActiveMQ و Kafka (عبر موصلات). الهدف الأساسي من MassTransit هو تبسيط تطوير الخدمات التي تتفاعل عبر الرسائل غير المتزامنة، مما يريح المطور من الحاجة إلى التعمق في التفاصيل منخفضة المستوى لوسيط معين.

لماذا تحتاج MassTransit؟ في بنية الخدمات المصغرة الحديثة، يجب أن تتواصل الخدمات مع بعضها البعض بشكل موثوق وغير متزامن. بدلاً من استدعاءات HTTP المباشرة (التي قد تؤدي إلى أعطال متتالية وارتباط شديد)، يتم استخدام تبادل الرسائل. تتولى MassTransit المهام المعقدة مثل: إدارة الاتصالات والقنوات، إعادة المحاولة عند الفشل، معالجة الأخطاء، المعاملات الموزعة (عبر sagas)، إدارة قوائم الانتظار والموضوعات، تسلسل/إلغاء تسلسل الرسائل، بالإضافة إلى توفير واجهة برمجة تطبيقات (API) سهلة لإرسال الرسائل ونشرها واستهلاكها.

تنفذ المكتبة عدة أنماط رئيسية: Command-Query Separation (عبر إرسال الأوامر)، Publish-Subscribe (عبر نشر الأحداث)، Request-Response (للتبادل المتزامن عبر رسائل غير متزامنة)، و Saga Pattern (لإدارة عمليات الأعمال طويلة الأمد). بفضل هذا، تعتبر MassTransit المعيار الفعلي لبناء أنظمة موزعة موثوقة وقابلة للتوسع والاختبار على .NET.

2. التثبيت

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

التثبيت الأساسي (بدون نقل):

dotnet add package MassTransit

لـ RabbitMQ:

dotnet add package MassTransit.RabbitMQ

لـ Azure Service Bus:

dotnet add package MassTransit.Azure.ServiceBus.Core

لـ Amazon SQS:

dotnet add package MassTransit.AmazonSQS

لـ Kafka:

dotnet add package MassTransit.Kafka

3. بداية سريعة — مثال عملي بسيط

فيما يلي مثال بسيط لإرسال واستقبال رسالة باستخدام RabbitMQ. تأكد من تشغيل RabbitMQ (مثلاً عبر Docker: docker run -d --hostname my-rabbit --name some-rabbit -p 5672:5672 -p 15672:15672 rabbitmq:3-management).

using System;
using System.Threading.Tasks;
using MassTransit;

// 1. تعريف عقد الرسالة
public record OrderSubmitted
{
    public Guid OrderId { get; init; }
    public string CustomerName { get; init; }
}

// 2. تعريف المستهلك (Consumer)
public class OrderSubmittedConsumer : IConsumer<OrderSubmitted>
{
    public async Task Consume(ConsumeContext<OrderSubmitted> context)
    {
        var message = context.Message;
        Console.WriteLine($"[Consumer] تم استلام الطلب: {message.OrderId} من {message.CustomerName}");
        await Task.CompletedTask;
    }
}

// 3. إعداد وتشغيل الناقل (Bus)
public class Program
{
    public static async Task Main()
    {
        var busControl = Bus.Factory.CreateUsingRabbitMq(cfg =>
        {
            cfg.Host("localhost", "/", h =>
            {
                h.Username("guest");
                h.Password("guest");
            });

            cfg.ReceiveEndpoint("order-queue", e =>
            {
                e.Consumer<OrderSubmittedC                    

توصيات