Wolverine لـ C# (.NET): الدليل الشامل لـ Message Bus و CQRS
1. ما هي Wolverine ولماذا تحتاجها؟
Wolverine هي مكتبة عالية الأداء لمنصة .NET، تطبق أنماط Message Bus و CQRS (Command Query Responsibility Segregation). توفر للمطورين أداة قوية ومرنة لبناء تطبيقات موزعة وقابلة للتوسع وتحمل الأخطاء. على عكس العديد من البدائل، Wolverine ليست مجرد طبقة تجريد فوق قوائم انتظار الرسائل، بل هي إطار عمل متكامل يتولى مسؤولية توجيه الرسائل، معالجة الأخطاء، إدارة العمليات الطويلة (Sagas)، والتكامل مع بروتوكولات النقل الشائعة (RabbitMQ، Azure Service Bus، Amazon SQS، Kafka وغيرها).
لماذا تحتاج Wolverine؟ في بنية الخدمات المصغرة الحديثة والأنظمة المبنية على الأحداث (Event-Driven)، غالبًا ما تظهر الحاجة لنقل موثوق للرسائل بين المكونات. Wolverine تحل هذه المشكلة من خلال تقديم:
- Message Bus: يوفر نقلًا غير متزامن وموثوقًا وقابلًا للتوسع للرسائل بين الخدمات.
- CQRS: يفصل بين عمليات قراءة وكتابة البيانات، مما يسمح بتحسين الأداء وتوسيع نطاق كل جانب من النظام بشكل مستقل.
- Saga: يدير العمليات التجارية الطويلة التي قد تتكون من عدة خطوات وتتطلب تعويضًا عند حدوث أعطال.
- التكامل مع ASP.NET Core: يندمج بسهولة مع المشاريع الحالية باستخدام آليات DI و middleware المألوفة.
Wolverine هي الخيار الأمثل لمن يريد أقصى أداء ومرونة دون التضحية بسهولة التطوير. يتم تطويرها بنشاط من قبل المجتمع وتستخدم في بيئات الإنتاج.
2. التثبيت
يتم تثبيت Wolverine عبر NuGet. ستحتاج أولاً إلى الحزمة الأساسية، ثم حزم إضافية حسب الناقل الذي تختاره.
أمر التثبيت الأساسي:
dotnet add package WolverineFx
لـ RabbitMQ:
dotnet add package WolverineFx.RabbitMQ
لـ Azure Service Bus:
dotnet add package WolverineFx.AzureServiceBus
لـ Amazon SQS:
dotnet add package WolverineFx.AmazonSQS
لـ Kafka:
dotnet add package WolverineFx.Kafka
بعد تثبيت الحزم، قم بإعداد Wolverine في ملف Program.cs الخاص بك.
3. البداية السريعة — مثال عملي بسيط
أنشئ تطبيق وحدة تحكم .NET وأضف الحزمة WolverineFx. ثم استبدل محتوى Program.cs بالكود التالي:
using Wolverine;
using Microsoft.Extensions.Hosting;
// 1. إنشاء المضيف مع Wolverine
using var host = await Host.CreateDefaultBuilder(args)
.UseWolverine(opts =>
{
// إعداد Wolverine (بدون ناقل، نستخدم الناقل المدمج)
opts.PublishAllMessages().Locally();
})
.StartAsync();
// 2. الحصول على مثيل IMessageBus
var bus = host.Services.GetRequiredService();
// 3. إرسال رسالة
await bus.SendAsync(new HelloMessage("World"));
// 4. تعريف المعالج (يمكن أن يكون في أي كلاس)
public class HelloMessageHandler
{
public void Handle(HelloMessage message)
{
Console.WriteLine($"Hello, {message.Name}!");
}
}
// 5. تعريف الرسالة نفسها
public record HelloMessage(string Name);
هذا المثال البسيط