NestJS — Node.js للمؤسسات

وسائل نقل الخدمات المصغرة: Redis و MQTT و NATS

18 دقيقة الدرس 68 من 80

وسائل نقل الخدمات المصغرة: Redis و MQTT و NATS

غطت دروس الخدمات المصغرة السابقة TCP وRabbitMQ وKafka وgRPC. يدعم NestJS أيضاً وسائل Redis وMQTT وNATS، وكل منها موجه لاحتياجات رسائل ومفاضلات تشغيلية مختلفة.

الفكرة الأساسية

تدور هذه الميزة حول التحكم في كيفية تنظيم التطبيق وسلوكه وقت التشغيل. النقاط التالية هي ما يجب أن يعرفه المطور قبل استخدامها في مشروع حقيقي:

  • وسيلة Redis بسيطة للتواصل الخفيف بأسلوب pub/sub لكنها ليست مثل Redis Streams المتينة.
  • ينتشر MQTT في إنترنت الأشياء ورسائل الأجهزة حيث تهم المواضيع والعملاء محدودو الموارد.
  • NATS خفيف وسريع ومناسب لرسائل الخدمات بتوجيه قائم على subject.
  • اختيار وسيلة النقل يؤثر في ضمانات التسليم والضغط العكسي والترتيب والمراقبة والتشغيل.
  • يجرد ClientProxy واجهة العميل، لكن لكل مشغل سلوك اتصال ونشر مختلف.

مثال عملي

يوضح المثال التالي الشكل العملي للفكرة داخل مشروع NestJS. ليست الغاية حفظ الكود، بل فهم مكانه في المعمارية:

ClientsModule.register([ { name: 'INVENTORY_CLIENT', transport: Transport.NATS, options: { servers: ['nats://localhost:4222'] }, }, ]); @Controller() export class InventoryEventsController { @EventPattern('inventory.reserved') handleReserved(@Payload() event: InventoryReservedEvent) { return this.projection.update(event); } }
ملاحظة تصميمية: لا تختر وسيلة نقل فقط لأنها سهلة محلياً. اختر بناءً على دلالات الإنتاج: المتانة، نموذج إعادة المحاولة، الترتيب، مجموعات المستهلكين، وملكية التشغيل.

قائمة تطبيق إنتاجية

  • وثق توقعات التسليم لكل نمط رسالة.
  • اضبط مراقبة حالة الاتصال للعملاء والخوادم.
  • صمم مستهلكين قابلين للتكرار الآمن لوسائل at-least-once.
  • تجنب وسائل pub/sub للعمليات التي تتطلب إعادة تشغيل متينة إلا إذا دعمها الوسيط.
قاعدة عملية: إذا جعلت الميزة الحدود أوضح والاختبارات أسهل فهي اختيار جيد. إذا أخفت التبعيات أو صعّبت التتبع، فأعد التصميم.

الخلاصة

يغطي هذا الدرس جزءاً متقدماً من NestJS يجب فهمه عند بناء تطبيقات مؤسسية. ركّز على الحدود الواضحة، والسلوك القابل للاختبار، واختيار الأداة المناسبة للسياق بدلاً من استخدام كل ميزة في كل مكان.