PHP Academy · درس

إعادة محاولة المهام وتأخيرها وتسلسلها

اضبطوا المحاولات والتأخيرات وسلسلوا المهام التابعة معًا

الدرس 3 من 413 خطوة

إعادة محاولة المهام وتأخيرها وتسلسلها درس مجاني في PHP Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في PHP Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة PHP Academy 4 دروس في المجموع.

الحد الأقصى للمحاولات

حدّد عدد المرات التي ينبغي فيها إعادة محاولة تنفيذ Job قبل نقلها إلى failed_jobs.

<?php
class SendWelcomeEmail implements ShouldQueue
{
    public int $tries = 3; // retry up to 3 times
}

الحد الأقصى للاستثناءات

استخدم $maxExceptions لتحديد إعادة المحاولات بناءً على عدد الاستثناءات (بخلاف attempts التي تحسب جميع المحاولات، بما فيها حالات انتهاء المهلة).

<?php
public int $maxExceptions = 3;

مهلة إعادة المحاولة

حدّد تأخيرًا (بالثواني) بين محاولات إعادة التنفيذ.

<?php
public int $backoff = 60; // wait 60 seconds before retry

// Or exponential backoff:
public function backoff(): array
{
    return [1, 5, 10]; // 1s, 5s, 10s between attempts
}

مهلة Job

حدّد أقصى مدة للتنفيذ بالثواني. إذا تجاوزها العامل، تُعاد Job إلى Queue.

<?php
public int $timeout = 120; // 2 minutes max

الإرسال مع تأخير

أخّر Job انطلاقًا من الموضع الذي تستدعي فيه الإرسال.

<?php
SendReminder::dispatch($user)->delay(now()->addDay());
// Or pass a Carbon instance:
SendReminder::dispatch($user)->delay(Carbon::tomorrow());

fail() و released()

داخل handle()، استدعِ $this->fail($exception) لوضع علامة الفشل على Job فورًا، أو $this->release($delay) لإعادتها إلى Queue مع تأخير.

<?php
public function handle(): void
{
    try {
        // ...
    } catch (TransientException $e) {
        $this->release(30); // re-queue in 30 seconds
    } catch (FatalException $e) {
        $this->fail($e);   // mark as failed now
    }
}

الطريقة failed()

عرّف طريقة failed() في Job لتنفيذ التنظيف عند استنفاد جميع المحاولات.

<?php
public function failed(\Throwable $exception): void
{
    // Notify team, update DB, etc.
    Log::error("Job failed: ".$exception->getMessage());
}

تسلسل Jobs

سلسِل Jobs بحيث لا يبدأ تنفيذ كل واحدة إلا بعد نجاح السابقة.

<?php
Bus::chain([
    new DownloadFile($url),
    new ProcessFile($path),
    new NotifyUser($user),
])->dispatch();

التقاط حالات فشل السلسلة

استخدم catch() لمعالجة حالات فشل السلسلة من دون إيقافها بالكامل.

<?php
Bus::chain([...])
    ->catch(fn (\Throwable $e) => Log::error($e))
    ->dispatch();

Bus::batch()

أرسل مجموعة من Jobs بالتوازي، ونفّذ استدعاءً عند اكتمالها جميعًا أو عند فشل أي منها.

<?php
Bus::batch([
    new ImportRow($rows[0]),
    new ImportRow($rows[1]),
])->then(fn ($b) => Log::info("All done"))
  ->catch(fn ($b, $e) => Log::error($e))
  ->dispatch();

خيارات عامل Queue

ابدأ العمال بإعدادات محددة لإعادة المحاولة والمهلة: php artisan queue:work --tries=3 --timeout=90. تتجاوز إعدادات مستوى Job إعدادات مستوى العامل.

الملخص

حدّد $tries و$backoff و$timeout في Job. استخدم release() لحالات الفشل المؤقتة وfail() للحالات الدائمة. وسلْسِل Jobs المتتابعة باستخدام Bus::chain().

تحقق سريع

أي طريقة تعيد Job إلى Queue مع تأخير من داخل handle()؟

البدء مجانًا

تعلم PHP مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
49
الدروس
195

الأسئلة الشائعة

هل درس «إعادة محاولة المهام وتأخيرها وتسلسلها» مجاني؟

نعم — نص درس «إعادة محاولة المهام وتأخيرها وتسلسلها» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة PHP Academy، انتقل إلى CoddyKit PRO. تتضمن دورة PHP Academy 4 دروس في المجموع.

ماذا ستتعلم في «إعادة محاولة المهام وتأخيرها وتسلسلها»؟

اضبطوا المحاولات والتأخيرات وسلسلوا المهام التابعة معًا تتمرن على PHP Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ PHP Academy؟

لا تُشترط خبرة سابقة. PHP Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «إعادة محاولة المهام وتأخيرها وتسلسلها»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس PHP Academy هذا؟

نعم. كل درس في PHP Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. مفاهيم قوائم الانتظار وبرامج التشغيل
  2. إنشاء المهام وإرسالها
  3. إعادة محاولة المهام وتأخيرها وتسلسلها
  4. مراقبة قوائم الانتظار باستخدام Laravel Horizon
← العودة إلى PHP Academy