Apabila menggunakan baris gilir Laravel, kita mungkin menghadapi kegagalan pelaksanaan tugas. Pada masa ini, Laravel menyediakan penyelesaian yang baik, iaitu menggunakan baris gilir kegagalan.
Apabila kami melaksanakan tugas baris gilir, kami boleh menolak tugasan yang gagal ke dalam baris gilir yang direka khusus untuk mengendalikan tugasan yang gagal, dan kemudian menyemak baris gilir ini dengan kerap dan melaksanakan semula tugasan yang gagal di dalamnya. Dengan cara ini, kami dapat mengelak tugas giliran daripada ditamatkan kerana beberapa masalah kecil dan terus berkhidmat kepada kami.
Baris gilir kegagalan Laravel menyediakan berbilang konfigurasi dan antara muka yang boleh dilanjutkan, yang boleh kami konfigurasikan mengikut keperluan kami sendiri.
Pertama, kita perlu menetapkan baris gilir yang tugasan gagal harus dimasukkan dalam fail konfigurasi config/queue.php
. Kunci item konfigurasi ini ialah failed
dan nilainya ialah tatasusunan, yang mengandungi dua item konfigurasi: driver
dan queue
. Item konfigurasi driver
menunjukkan pemacu kegagalan yang kami mahu gunakan Laravel menyediakan dua pemacu kegagalan, database
dan redis
, secara lalai. Dan queue
menunjukkan baris gilir mana yang akan dimasukkan oleh tugas yang gagal.
'failed' => [ 'driver' => 'database', 'queue' => 'failed', ],
Jika kami ingin menggunakan pemacu kegagalan lain, kami boleh melakukannya dengan mendaftarkan pemacu kegagalan tersuai dan merujuknya dalam item konfigurasi driver
.
Kod untuk mendaftarkan pemandu tersuai adalah seperti berikut:
Queue::failing(function ($connection, $job, $data) { // 自定义处理逻辑 });
Seterusnya, kita perlu menentukan logik khusus untuk mengendalikan tugas yang gagal. Kami boleh terus menolak tugasan yang gagal ke dalam baris gilir sekali lagi, supaya tugasan itu akan dilaksanakan semula semasa pemprosesan baris gilir seterusnya. Sebagai alternatif, kami juga boleh menyimpan beberapa maklumat tentang tugas yang gagal untuk pemeriksaan dan pemprosesan seterusnya.
Untuk kaedah pemprosesan menolak tugasan yang gagal ke dalam baris gilir, kita boleh menggunakan kod berikut:
Queue::failing(function ($connection, $job, $data) { $queue = $job->getQueue(); $payload = $job->payload(); Queue::pushRaw($payload, $queue); });
Kod ini menolak tugasan yang gagal kembali ke baris gilir asal, menunggu untuk dilaksanakan lain kali.
Bagi cara menyimpan maklumat tugas yang gagal, kita boleh menggunakan kod berikut:
Queue::failing(function ($connection, $job, $data) { // 将失败任务信息存储到数据库中 DB::table('failed_jobs')->insert([ 'connection' => $connection, 'queue' => $job->getQueue(), 'payload' => $job->getRawBody(), 'exception' => $data['exception'], 'failed_at' => now(), ]); });
Kod ini menyimpan maklumat tugas yang gagal ke dalam jadual pangkalan data failed_jobs
supaya Kami akan semak dan uruskan kemudian.
Selain daripada dua kaedah pemprosesan di atas, Laravel juga menyediakan lebih banyak kaedah pemprosesan untuk kita pilih. Kami boleh menyemak dokumentasi Laravel dan kod sumber untuk mendapatkan butiran lanjut.
Akhir sekali, kita perlu menyemak baris gilir kegagalan dan mencuba semula tugasan di dalamnya secara berkala. Laravel menyediakan perintah queue:retry
secara lalai untuk mencuba semula tugasan Perintah ini menerima parameter pilihan --queue
, menunjukkan baris gilir tugasan yang ingin kami cuba semula. Jika parameter ini tidak dinyatakan, semua baris gilir akan dicuba semula secara lalai.
php artisan queue:retry 5 --queue=my-queue
Arahan ini akan melaksanakan semula 5 tugasan pertama yang gagal daripada baris gilir my-queue
dalam baris gilir kegagalan.
Selain itu, kami juga boleh menggunakan alat tugas berjadual sistem pengendalian (seperti crontab) untuk melaksanakan perintah queue:retry
secara berkala untuk mengendalikan tugas yang gagal dengan kerap.
Ringkasnya, baris gilir kegagalan Laravel menyediakan penyelesaian yang sangat berguna untuk mengendalikan kegagalan tugas baris gilir. Kita boleh mengkonfigurasinya mengikut keperluan kita sendiri dan mengendalikan tugas yang gagal dalam pelbagai cara. Pada masa yang sama, kami juga perlu menyemak baris gilir kegagalan secara berkala dan mencuba semula tugasan di dalamnya untuk memastikan tugas baris gilir dapat berjalan seperti biasa.
Saya harap artikel ini bermanfaat kepada semua.
Atas ialah kandungan terperinci Apa yang berlaku apabila baris gilir laravel gagal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!