محتويات الدورة

NestJS / المتقدم: العمر وأدلة العمل الموزع / الدرس 14

نقل الرسائل والعقود ودلالات الخطأ

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

وقت القراءة التقريبي: 4 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • ميز مراسلة الطلب والرد عن توصيل الحدث.
  • حدد نسخة الشكل والنطاق وسياسة الفشل لكل نقل.

لا يحدد نمط الرسالة ضمان التوصيل

تعرض الموائمات نموذجي طلب ورد وأحداث، ويحدد الوسيط التوجيه والإقرار والإعادة والديمومة. ليست MessagePattern معاملة أو ضمان مرة واحدة. اختر نقلاً موثقاً وثبت حزمه قبل ضبطه، وافصل المجال عن أغلفة الحمولة. يعيد المستهلك استعمال سياسة النشر لكنه يثبت سياقاً موثوقاً ولا يعتبر حقل مستأجر إذناً. تحتاج حدود الثقة موائمات صريحة ولو استدعت الخدمة نفسها. لا تحول سهولة المزخرف رسالة غير متحقق منها إلى استدعاء داخلي موثوق، لأن مصدرها قد يكون خدمة مخترقة أو مستهلكاً ذا صلاحيات أضيق.

أصدر الحمولة وسم العملية المنطقية

JSON عقد حدث اصطناعي لا أمر وسيط أو توصيل مشاهد. تعرف هوية الحدث الإعادة وترتب نسخة الكيان وفق سياستها، وتعرف schemaVersion الشكل. تختلف المعاني، فتحقق من الحجم والبنية والقيم قبل الأثر وأثبت نطاق المنتج ببروتوكول الثقة. لا تحمل اعتماداً أو طلب HTTP كاملاً بالرسالة. يربط معرف التتبع العمل ولا يصادق المرسل. ينبغي أن يقرر المستهلك دعم النسخة أو رفضها بوضوح، بدلاً من قراءة حقول مجهولة كأنها نسخة أقدم وتوليد أثر لا يوافق قصد المنتج.

json حدث اصطناعي ذو نسخة
{"schemaVersion":1,"eventId":"evt-17","type":"course.published","tenantId":"lab-a","courseId":"c1","revision":5,"traceId":"synthetic-trace"}

لا تنشر رسالة؛ يفصل السجل نسخة الشكل وهوية الحدث والكائن ونسخته.

افصل إقرار التوصيل عن اكتمال العمل

لا يثبت استقبال البايتات حفظ الأثر. قد يضيع الفعل بإقرار سابق للحفظ، وقد تحدث إعادة إذا ضاع إقرار لاحق. استعمل آلية النقل واجعل الأثر متحملاً للتكرار. لا تصبح استثناءات HTTP وحالاته دلالة RPC أو وسيط تلقائياً؛ اختر العقد المناسب. اضبط العام لكل سياق في التطبيق الهجين ولا تفترض وراثة دورة HTTP. اختبر الربط برسائل اصطناعية في بيئة مأذونة. تختلف إعادة طلب ينتظر جواباً عن حدث لا ينتظر المستهلك منه قيمة راجعة، ويجب ألا يخفي المزخرف هذا الفرق عن خطة التعافي.

ارفض الحالة القديمة دون ادعاء اكتمال التوصيل

يطبق المخفض النسخ الأحدث فقط؛ لا تستبدل خمسة مكررة أو أربعة متأخرة الستة. لا يثبت وصول الوسط أو تطابق حدثين بالنسخة نفسها. قد يحتاج المستهلك إزالة بمعرف الحدث وتعافي فجوة من المعتمد. يختبر الترتيب فقط بلا وسيط أو اشتراك أو قاعدة أو إقرار. افصل ترتيب الكيان عن سير متعدد الكيانات؛ لا تعرف نسخة واحدة ترتيباً كلياً لكل العمل. ينبغي أن يفهم المستهلك هل يتلقى لقطة حالة أم تغيراً جزئياً، لأن تجاهل حدث قديم يصلح للأولى وقد يفقد أثراً لازماً في الثانية.

javascript نموذج محلي كامل لترتيب النسخة
let revision=3;
for (const incoming of [5,5,6,4]) revision=Math.max(revision,incoming);
console.assert(revision === 6);

النسخة النهائية ستة ولا تثبت تاريخ أحداث كاملاً أو ضمان توصيل.

قيد الإعادة والحمولات وعمل المستهلك

حدد المحاولات والتأخير واحتفاظ الفشل وفق المجال، ولا تعد الحمولة المعيبة للأبد. قيد الحجم وتزامن المصدر واحفظ الموعد وأبعد الخاص عن السجل. تحتاج الرسالة المعطلة مسار مراجعة لا يحجب الصحيح إلى الأبد. وثق تفاعل التطور والتراجع مع الأحداث المحفوظة. يحلل المقرر الحدث ويشغل المخفض فقط دون وسيط أو مستمع أو إقرار أو استثناء نقل. يستهدف التحقق الحقيقي الموائم وإصداراته بظروف مأذونة. نجاح وظيفة محلية لا يثبت أن الوسيط سيحفظ الرسالة أو يعيدها بعد انهيار، ويجب إبقاء الادعاء ضمن هذا الحد.

الأخطاء الشائعة وإصلاحها

يصبح خطأ HTTP نتيجة وسيط غير محددة

لماذا يحدث؟
افترض أن دلالات فشل نقل معين محمولة تلقائياً إلى نقل آخر.
كيف تصلحه؟
عرف عقد خطأ RPC أو الحدث والإقرار الخاص بالنقل المختار.
كيف تتجنب تكراره؟
اختبر كل سياق نقل مدعوم بصورة مستقلة.

تكرر رسالة أثرها الجانبي

لماذا يحدث؟
افترض أن توصيل الرسالة يحدث مرة واحدة بالضبط.
كيف تصلحه؟
استخدم هوية حدث مستقرة وآثاراً دائمة تتحمل إعادة التنفيذ.
كيف تتجنب تكراره؟
اختبر فقد الإقرار بعد حفظ عمل المجال.

تعالج نسخة حمولة غير مدعومة بصمت

لماذا يحدث؟
لم يحدد تطور شكل الحمولة قاعدة قبول صريحة للنسخ.
كيف تصلحه؟
تحقق من نسخة الحمولة ووجه غير المدعوم إلى مسار فشل آمن.
كيف تتجنب تكراره؟
احتفظ بعينات لمنتجين ومستهلكين من الإصدارات القديمة والجديدة.

اختبر فهمك

1. لماذا لا يمكن استعمال schemaVersion وrevision بدلاً من بعضهما؟

اعرض الحل المشروح

تحدد نسخة المخطط كيفية تفسير حمولة الرسالة، بينما ترتب revision حالة كائن معين وفق عقد مجاله. قد يحمل حدث بصيغة قديمة نسخة أحدث من الكائن. تحقق من المعنيين بصورة مستقلة، ولا تستنتج توافق صيغة الحمولة من رقم نسخة أكبر للكيان المجمع.

2. هل يثبت مخفض النسخ المحلي عدم فقد أي حدث نشر؟

اعرض الحل المشروح

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

أهم ما تعلمته

  • لا تستبدل أنماط الرسائل عقود النقل وتوصيل المجال.
  • تثبت النسخة والهوية والترتيب والإقرار حقائق مختلفة.

المراجع الرسمية