إيجي تاج · اعرف. ناقش. جرّب. نفّذ.
إعادة محاولة مهمة فاشلة دون تكرار الإجراءات السابقة

إعادة محاولة مهمة فاشلة دون تكرار الإجراءات السابقة

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

دليل عملي

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

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

افصل بين فشل المهمة وفشل الإجراء نفسه

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

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

قسّم سير العمل إلى خطوات لها حالات محفوظة

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

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

استخدم مفتاحًا ثابتًا لمنع ازدواج الأثر

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

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

احفظ نتيجة الخطوة عند نقطة حفظ يمكن الوثوق بها

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

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

ثبّت المدخلات وحدّد نقطة الاستئناف الصحيحة

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

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

امنع المحاولات المتزامنة من تنفيذ الإجراء مرتين

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

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

اختر سياسة إعادة المحاولة بحسب نوع الخطأ

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

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

تعامل مع التصحيح والتشخيص بوصفهما جزءًا من الاستئناف

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

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

أسئلة شائعة

هل يمكن استئناف مهمة قديمة لم يكن فيها حفظ لتقدم الخطوات؟

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

هل يكفي وضع علامة مكتملة بعد كل خطوة لمنع التكرار؟

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

ماذا أفعل إذا كانت الخدمة الخارجية لا تدعم منع الازدواج؟

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

هل أعيد استخدام مفتاح العملية بعد تعديل البيانات الخاطئة؟

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

هل تريد الاحتفاظ بالمقال أو إعادة استخدامه؟
مجتمع إيجي تاجعن المجتمع

شارك في تقييم ونقاش المقال

رأيك يضيف قيمة للمقال ويساعدنا على تحسين المحتوى والنقاش حوله.

تفاعل مع المقالاختر التفاعل المناسب، ويمكنك تغيير رأيك لاحقًا.
قيّم جودة المقاللا توجد تقييمات بعد — كن أول من يقيّم.

نقاش القراء

النقاش

جارٍ تحميل التعليقات…

بعد هذه المادة

تابع القراءة

كل مواد الأتمتة وسير العمل
من نفس القسم04
  1. 02
  2. 03
  3. 04
اختيار القراء

الأكثر قراءة

الترتيب الكامل
  1. 01
  2. 02
  3. 03
  4. 04
  5. 05
يتجدد مع النشر

أحدث المواد

  1. 01
  2. 02
  3. 03
  4. 04
  5. 05
  6. 06