اختبار API / دليل حلول تحريري
تشخيص الآثار المكررة بعد مهلة غير محسومة
فصل محاولات الإرسال وقرارات الإعادة والاعتماد الدائم والتسليم اللاحق قبل الإصلاح.
قاعدة معرفة للقراءة فقط · بلا تعليقات عامة
تعرّف على الأعراض
تنتهي مهلة العميل فيعيد المحاولة ثم يرى مدخلين أو إشعارين. قد تحمل الاستجابات المعرف نفسه. احفظ معرف العمل المختلق وتسلسل المحاولات ونقطة الانقطاع والحالة النهائية. لا تثبت المهلة فشل الإجراء الأول ولا يثبت تطابق الردود تفرد الأثر.
افهم الأسباب المحتملة
- قد ينجح الاعتماد الأول قبل ضياع الرد، أو يخطئ نطاق مفتاح الإعادة وربط الحمولة، أو يتسابق عاملان عبر فحص ثم إدراج، أو يكرر مستهلك لاحق الأثر. وقد يساهم احتفاظ قصير أو تصنيف خطأ دائم كعابر. تبقى فرضيات حتى يفصلها حد الأثر المرصود.
إعادة بناء المحاولات والإجراءات المعتمدة
ابن خطا زمنيا صغيرا من تشخيص معتمد موجود بمعرفات مختلقة غير سرية. افصل استقبال الطلب والبحث عن الإعادة واعتماد العمل وإرسال الرد وتسليم الرسالة واعتماد الإشعار. لا تفترض مساواة السطر بإجراء دائم. قارن الحالة وسجلات الأحداث أو المستهلك حيث يوجد دليل مصرح به. يستخدم الدليل سجلات مختلقة محلية ولا يستعلم خدمة. إذا بقيت النتيجة مجهولة فاتبع المصالحة الموثقة لا عملية أخرى للاستكشاف.
تحديد أول حد يتكرر عنده الأثر
يتضمن المثال محاولتي طلب واعتماد مدخل واحد واعتمادي إشعار. يوجه الرصد التحقيق إلى حد الأثر اللاحق ولا يثبت تكرار إنشاء المدخل. لا يفسر سبب تكرار الإشعار؛ فالتسليم وإزالة التكرار والمعاملة تحتاج دليلا. يفصل العد المحلي المحاولات والآثار بدلا من عدد مضلل واحد. احفظ نطاق الحدث ومعرف العمل، ولا تستبدل هوية إزالة التكرار الموثقة بمعرف ربط الطلب.
events = [("attempt", "action-4"), ("entry-commit", "action-4"), ("attempt", "action-4"), ("notification-commit", "action-4"), ("notification-commit", "action-4")]
counts = {kind: sum(k == kind and action == "action-4" for k, action in events) for kind in ("attempt", "entry-commit", "notification-commit")}
assert counts == {"attempt": 2, "entry-commit": 1, "notification-commit": 2}
print("entry unique; notification boundary duplicated")
entry unique; notification boundary duplicated
يعد البرنامج الكامل خمسة سجلات محلية ويفحص معناها المعلن. لا يثبت اكتمال سجل حقيقي أو ضمان التسليم أو إزالة تكرار دائمة. لا يرسل محاولات أو طلبات أو عمالا أو رسائل فعليا.
إصلاح الحد المسؤول بصورة محددة
لتكرار المدخل راجع العلاقة الذرية بين حجز الإعادة واعتماد العمل. وللتكرار اللاحق راجع هوية الأثر والاحتفاظ وحد التعافي من الانهيار لدى المستهلك. اربط المفاتيح بالمستدعي والعملية وارفض الحمولة المختلفة وحدد الجاري. لا تحجب كل الإشعارات أو تقبل ادعاء العميل بحدوث العمل. ولا تدع التنفيذ الموزع مرة واحدة من إعادة ناجحة واحدة. سم الآثار التي يمنعها التصميم وسلوك انقطاع التخزين أو التسليم.
تحقق من نجاح الإصلاح
افحص ضياع رد مختلقا مضبوطا وإعادة مطابقة وتعارض حمولة ونطاق مستدع مختلف وتسليما لاحقا مكررا عند الحد المعتمد. اشترط أعداد المدخلات والإشعارات النهائية الموثقة لا تطابق الأجسام فقط. سجل الدليل المنفذ وسم افتراضات التخزين والتزامن والانهيار غير المختبرة. يثبت العد المحلي تفسير بياناته فقط.
امنع تكرار المشكلة
- احتفظ بتصنيف المحاولات والمواعيد ودورة الإعادة وهوية أثر المستهلك في العقد ذي الإصدار. افصل المحاولات والاعتماد في التشخيص واحتفظ بحالات رفض اختلاف الحمولة والفاعل. تبقى المهلة عدم يقين حتى المصالحة، ويتبع التعافي السياسة المعتمدة لا تكرار العمل ارتجالا.