Rumah  >  Artikel  >  rangka kerja php  >  Apakah yang perlu saya lakukan jika baris gilir laravel tidak dapat diedarkan?

Apakah yang perlu saya lakukan jika baris gilir laravel tidak dapat diedarkan?

PHPz
PHPzasal
2023-04-23 09:14:58556semak imbas

Dalam pembangunan Laravel, baris gilir tugas ialah komponen yang sangat penting, yang membolehkan kami melakukan beberapa operasi yang memakan masa secara tak segerak tanpa menjejaskan pengalaman pengguna. Barisan tugas dalam Laravel dibahagikan kepada dua bahagian: pengagihan tugas dan pelaksanaan tugas. Walaupun pengagihan tugas sepatutnya sangat mudah dalam teori, kadangkala kita menghadapi beberapa masalah, seperti kegagalan pengagihan tugas Apakah yang perlu kita lakukan pada masa ini?

Pertama, kita perlu menentukan sama ada pengagihan tugas berjaya. Pengagihan tugas Laravel dilaksanakan melalui baris gilir Kita boleh menentukan sama ada tugas itu telah diagihkan dengan menyemak status baris gilir. Laravel menyediakan arahan untuk menyemak status baris gilir Anda boleh memasukkan arahan berikut dalam terminal:

php artisan queue:work --status

Selepas pelaksanaan, kita boleh melihat output yang serupa dengan yang berikut:

Status check starting...
The "database" queue has 0 jobs processing.
The "redis" queue is not available.
Written jobs:
- Job 123 on connection "database"
- Job 456 on connection "redis"
- Job 789 on connection "redis"
...

Perintah ini akan mengeluarkan status semua baris gilir, termasuk tugasan yang sedang diproses dan tugasan yang menunggu untuk diproses. Apa yang perlu kita ambil perhatian ialah dalam Laravel, tugasan tidak dilaksanakan serta-merta, tetapi perlu menunggu pelaksana tugas (pekerja) dalam baris gilir untuk diproses. Oleh itu, walaupun tugas itu telah berjaya diagihkan ke baris gilir, kita perlu menunggu seketika untuk melihatnya diproses.

Jadi, jika kita telah menentukan bahawa pengagihan tugas berjaya, tetapi tugas itu masih tidak dilaksanakan, apakah yang perlu kita lakukan pada masa ini? Berikut ialah beberapa penyelesaian yang mungkin:

  1. Semak pemacu baris gilir

Laravel menyokong banyak pemacu baris gilir yang berbeza, termasuk Redis, MySQL, Beanstalkd, dsb. Jika anda menggunakan Redis atau MySQL sebagai pemacu baris gilir anda, anda perlu memastikan ia dikonfigurasikan dengan betul dan berfungsi dengan betul.

Secara khusus, kita perlu menyemak bahagian baris gilir dalam fail konfigurasi Laravel:

'connections' => [

    'sync' => [
        'driver' => 'sync',
    ],

    'database' => [
        'driver' => 'database',
        'table' => 'jobs',
        'queue' => 'default',
        'retry_after' => 90,
    ],

    'beanstalkd' => [
        'driver' => 'beanstalkd',
        'host' => 'localhost',
        'queue' => 'default',
        'retry_after' => 90,
        'block_for' => 0,
    ],

    'redis' => [
        'driver' => 'redis',
        'connection' => 'default',
        'queue' => 'default',
        'retry_after' => 90,
        'block_for' => null,
    ],

],

'default' => env('QUEUE_CONNECTION', 'sync'),

Dalam fail konfigurasi ini, kita perlu memastikan bahawa maklumat sambungan dan maklumat baris gilir telah dikonfigurasikan dengan betul. Jika ia tidak dikonfigurasikan dengan betul, baris gilir tugas tidak akan berfungsi.

  1. Semak Tugasan Baris

Jika baris gilir telah dikonfigurasikan dengan betul dan tugasan masih tidak dilaksanakan, maka kita perlu menyemak sama ada terdapat sebarang masalah dengan tugasan dalam barisan. Secara khusus, kita perlu menyemak sama ada kelas tugasan telah ditakrifkan, sama ada kaedah tugasan telah dilaksanakan dan sama ada parameter tugasan telah diluluskan dengan betul.

Berikut ialah definisi kelas tugas yang mudah:

<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;

class SendEmail implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        //
    }
}

Dalam kelas tugasan ini, kami mentakrifkan tugas SendEmail, yang melaksanakan antara muka ShouldQueue dan mentakrifkan kaedah handle() , kaedah ini akan dipanggil apabila tugasan dilaksanakan. Jika kelas tugas telah ditakrifkan dengan betul, tetapi tugas itu masih tidak dilaksanakan, maka kita perlu menyemak sama ada terdapat masalah dengan kod dalam kaedah handle().

  1. Semak pelaksana tugas

Jika tiada masalah dengan baris gilir dan tugasan, maka mungkin terdapat masalah dengan pelaksana tugas. Pelaksana tugasan dalam Laravel dimulakan melalui perintah baris gilir:kerja Kita boleh memasukkan perintah berikut dalam terminal untuk memulakan pelaksana tugas:

php artisan queue:work

Jika pelaksana tugas tidak berjalan seperti biasa, maka kita perlu. untuk menyemak fail Log untuk melihat sama ada terdapat sebarang mesej ralat yang berkaitan. Fail log Laravel disimpan dalam direktori storan/log secara lalai Kami boleh membuka fail log terkini untuk melihatnya.

  1. Gunakan pemacu tugas giliran lain

Jika tiada penyelesaian di atas berfungsi, maka kita boleh cuba menggunakan pemacu tugas giliran lain untuk melihat sama ada masalah itu boleh diselesaikan. Sebagai contoh, jika Redis digunakan sebagai pemacu tugas baris gilir sebelum ini, maka kita boleh cuba menggunakan MySQL atau Beanstalkd sebaliknya.

Dalam Laravel, kami boleh menukar pemandu tugas baris gilir dengan mudah. Cuma ubah suai maklumat pemacu baris gilir dalam fail konfigurasi Laravel.

Ringkasnya, apabila menghadapi masalah kegagalan baris gilir Laravel, kita perlu terlebih dahulu menentukan sama ada tugas itu telah berjaya diagihkan ke baris gilir, dan kemudian secara beransur-ansur menyemak pemandu gilir, tugas giliran, pelaksana tugas, dsb. masalah sehingga penyelesaiannya ditemui.

Atas ialah kandungan terperinci Apakah yang perlu saya lakukan jika baris gilir laravel tidak dapat diedarkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn