EasyNetQ لـ C# (.NET): الدليل الشامل للعمل مع RabbitMQ
1. ما هي EasyNetQ ولماذا تحتاجها؟
EasyNetQ هي مكتبة عميل عالية المستوى وصديقة للمطورين للعمل مع RabbitMQ في بيئة .NET (C#, F#, VB.NET). RabbitMQ هو وسيط رسائل (Message Broker) شهير يطبق بروتوكول AMQP (Advanced Message Queuing Protocol). يتيح لأجزاء مختلفة من التطبيق (الخدمات المصغرة، المهام الخلفية، تطبيقات الويب) التواصل مع بعضها البعض بشكل غير متزامن (Asynchronous) وموثوق مع ضمان التسليم.
لماذا تحتاج EasyNetQ إذا كان هناك عميل RabbitMQ الرسمي لـ .NET (RabbitMQ.Client)؟ العميل الرسمي هو مكتبة منخفضة المستوى. فهو يوفر قنوات "خام" (Raw Channels)، ومبادلات (Exchanges)، وطوابير (Queues)، ويتطلب من المطور إدارة الاتصالات والموضوعات (Topics) والتسلسل (Serialization) ومعالجة الأخطاء يدويًا. هذا قوي ولكنه معقد وعرضة للأخطاء. تقوم EasyNetQ بتحمل كل هذه المهام الروتينية، وتقدم واجهة برمجة تطبيقات (API) بسيطة وبديهية تعتمد على الاشتراك في الأحداث وإرسال الرسائل ككائنات .NET عادية.
المزايا الرئيسية لـ EasyNetQ:
- البساطة: أقل قدر من الإعدادات. فقط قم بالاتصال وابدأ في إرسال واستقبال الرسائل.
- الأتمتة: تدير تلقائيًا الاتصالات والطوابير والمبادلات والروابط (Bindings).
- Pub/Sub جاهز: تنفذ أنماط "الناشر-المشترك" (Publish/Subscribe) و"طابور المهام" (Work Queue) بدون كود إضافي.
- التسلسل: تستخدم JSON (Newtonsoft.Json) لتسلسل الرسائل "خارج الصندوق".
- إدارة الأخطاء: توفر آليات مدمجة لإعادة المحاولة ومعالجة الأخطاء و"الرسالة الميتة" (Dead Letter Queue).
- الرسائل المقولبة: تتعامل مع كائنات POCO بدلاً من مصفوفات البايت.
EasyNetQ هي الخيار الأمثل لمعظم المشاريع التي تحتاج إلى اتصال غير متزامن وموثوق، ولكن لا توجد رغبة أو حاجة للغوص في تفاصيل بروتوكول AMQP. إنها مثالية للهندسة المعمارية القائمة على الخدمات المصغرة، ومعالجات المهام الخلفية، وأنظمة الإشعارات، والتكامل بين التطبيقات.
2. التثبيت
يتم توزيع EasyNetQ عبر مدير الحزم NuGet. لتثبيتها في مشروعك، استخدم أحد الأوامر التالية في وحدة تحكم مدير الحزم (Package Manager Console) أو واجهة .NET CLI.
عبر .NET CLI:
dotnet add package EasyNetQ
عبر Package Manager Console (Visual Studio):
Install-Package EasyNetQ
بعد تثبيت المكتبة، تأكد من أن خادم RabbitMQ قيد التشغيل. إذا كنت تستخدم Docker، أسهل طريقة لتشغيله هي باستخدام الأمر التالي:
docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management
هذا الأمر سيشغل RabbitMQ مع واجهة إدارة ويب (يمكن الوصول إليها عبر http://localhost:15672، اسم المستخدم وكلمة المرور الافتراضية: guest/guest).
3. البداية السريعة: مثال عملي بسيط
لنقم بإنشاء تطبيق وحدة تحكم بسيط يقوم بإرسال واستقبال رسالة.
using System;
using System.Threading.Tasks;
using EasyNetQ;
// 1. تعريف نوع الرسالة
public class TextMessage
{
public string Text { get; set; }
}
class Program
{