Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara menggunakan fungsi Queue dalam rangka kerja Laravel

Cara menggunakan fungsi Queue dalam rangka kerja Laravel

WBOY
WBOYasal
2023-07-28 21:37:162936semak imbas

Cara menggunakan fungsi baris gilir (Baris Gilir) dalam rangka kerja Laravel

Pengenalan:
Baris Gilir (Queue) ialah mekanisme pemprosesan tak segerak biasa yang memainkan peranan penting dalam pembangunan web. Rangka kerja Laravel menyediakan fungsi baris gilir berkuasa yang boleh mengendalikan pelbagai tugas latar belakang dengan mudah, seperti menghantar e-mel, menjana laporan, memproses data besar, dsb. Artikel ini akan memperkenalkan cara menggunakan fungsi baris gilir dalam rangka kerja Laravel, termasuk konfigurasi baris gilir, definisi tugas dan pelaksanaan, dsb., dan memberikan contoh kod yang sepadan.

1. Konfigurasikan baris gilir

Dalam rangka kerja Laravel, konfigurasi baris gilir adalah sangat mudah. Pertama, dalam fail konfigurasi config/queue.php, kita boleh menetapkan pemacu giliran (Pemandu Gilir) dan parameter sambungan yang sepadan. Laravel menyokong pelbagai pemacu baris gilir, termasuk pangkalan data, Redis, Beanstalkd, dll. Di sini kita mengambil menggunakan pemacu pangkalan data sebagai contoh. config/queue.php中,我们可以设置队列驱动器(Queue Driver)和相应的连接参数。Laravel支持多种队列驱动器,包括数据库、Redis、Beanstalkd等。这里以使用数据库驱动器为例进行说明。

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

上述配置中,driver指定了队列驱动器为数据库驱动,table指定了存储队列任务的数据表名,queue指定了默认队列的名称,retry_after指定了任务执行失败后的重试时间。

二、定义任务

在Laravel框架中,队列任务(Job)是以类的方式定义的,通常存放在app/Jobs目录下。我们来创建一个简单的队列任务,用于发送邮件。

首先,使用Artisan命令来生成队列任务模板:

php artisan make:job SendEmailJob

生成成功后,在app/Jobs目录下会生成一个名为SendEmailJob的类文件。打开该类文件,可以看到以下代码:

namespace AppJobs;

use IlluminateBusQueueable;
use IlluminateContractsQueueShouldQueue;
use IlluminateFoundationBusDispatchable;
use IlluminateQueueInteractsWithQueue;
use IlluminateQueueSerializesModels;

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

    public function __construct()
    {
        //
    }

    public function handle()
    {
        // 发送邮件的逻辑代码
    }
}

在这个类中,我们可以定义发送邮件的逻辑代码。需要注意的是,由于队列任务是异步执行的,因此需要将ShouldQueue接口作为类的实现。同时,其他特征(Trait)DispatchableInteractsWithQueueQueueableSerializesModels提供了对队列的操作和对象序列化等支持。

三、任务入队

在Laravel框架中,任务入队通常是通过调用dispatch函数来实现。下面是一个将SendEmailJob任务入队的示例代码:

use AppJobsSendEmailJob;

dispatch(new SendEmailJob());

上述代码将SendEmailJob任务添加到默认队列中。如果需要指定队列名称,可以使用onQueue方法:

use AppJobsSendEmailJob;

dispatch((new SendEmailJob())->onQueue('emails'));

另外,如果希望任务延迟执行,可以使用delay方法:

use AppJobsSendEmailJob;

$job = (new SendEmailJob())->delay(Carbon::now()->addMinutes(10));

dispatch($job);

四、执行队列任务

在Laravel框架中,可以使用两种方法执行队列任务:同步执行和异步执行。

  1. 同步执行(Sync Driver)

同步执行是指任务在当前请求中立即执行,不经过队列驱动器的处理。在配置文件config/queue.php中,将默认的队列驱动器设为“sync”即可。

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

此时,通过调用dispatch函数将任务入队后,任务将会在当前请求中立即执行。

  1. 异步执行

异步执行是指任务由队列驱动器负责处理和执行。在配置文件config/queue.php中,将默认的队列驱动器设为其他驱动器,例如“database”。

'default' => env('QUEUE_DRIVER', 'database'),

然后,在终端中执行以下命令,监听并执行队列任务:

php artisan queue:work

此时,通过调用dispatch函数将任务入队后,任务将被添加到队列中,并由queue:workrrreee

Dalam konfigurasi di atas, driver menyatakan bahawa pemandu baris gilir ialah pemacu pangkalan data, jadual menentukan nama jadual data yang menyimpan tugas baris gilir dan baris gilir menentukan Menentukan nama baris gilir lalai, dan retry_after menentukan masa cuba semula selepas kegagalan pelaksanaan tugas.


2. Tentukan tugas

🎜Dalam rangka kerja Laravel, tugasan baris gilir (Jobs) ditakrifkan dalam bentuk kelas dan biasanya disimpan dalam direktori app/Jobs. Mari buat tugas giliran mudah untuk menghantar e-mel. 🎜🎜Pertama, gunakan arahan Artisan untuk menjana templat tugas baris gilir: 🎜rrreee🎜Selepas penjanaan berjaya, fail kelas bernama SendEmailJob akan dijana dalam direktori app/Jobs . Buka fail kelas ini dan anda boleh melihat kod berikut: 🎜rrreee🎜Dalam kelas ini, kita boleh menentukan kod logik untuk menghantar e-mel. Perlu diingat bahawa memandangkan tugas baris gilir dilaksanakan secara tidak segerak, antara muka ShouldQueue perlu dilaksanakan sebagai kelas. Pada masa yang sama, ciri lain (Trait) Dispatchable, InteractsWithQueue, Queueable, SerializesModels menyediakan operasi dan objek untuk beratur Serialisasi dan sokongan lain. 🎜🎜3. Barisan tugasan 🎜🎜Dalam rangka kerja Laravel, giliran tugasan biasanya dilaksanakan dengan memanggil fungsi penghantaran. Berikut ialah contoh kod yang membariskan tugasan SendEmailJob: 🎜rrreee🎜Kod di atas menambah tugasan SendEmailJob pada baris gilir lalai. Jika anda perlu menentukan nama baris gilir, anda boleh menggunakan kaedah onQueue: 🎜rrreee🎜 Selain itu, jika anda mahu tugasan ditangguhkan, anda boleh menggunakan delay kaedah: 🎜rrreee🎜 4. Laksanakan tugas giliran🎜 🎜Dalam rangka kerja Laravel, anda boleh menggunakan dua kaedah untuk melaksanakan tugas giliran: pelaksanaan segerak dan pelaksanaan tak segerak. 🎜
  1. Pelaksanaan segerak (Pemacu Penyegerakan)
🎜Pelaksanaan segerak bermaksud bahawa tugas itu dilaksanakan serta-merta dalam permintaan semasa tanpa diproses oleh pemandu baris gilir. Dalam fail konfigurasi config/queue.php, tetapkan pemacu baris gilir lalai kepada "segerak". 🎜rrreee🎜Pada masa ini, selepas memasukkan tugasan dengan memanggil fungsi dispatch, tugasan akan dilaksanakan serta-merta dalam permintaan semasa. 🎜
  1. Pelaksanaan tak segerak
🎜Pelaksanaan tak segerak bermaksud tugas diproses dan dilaksanakan oleh pemandu baris gilir. Dalam fail konfigurasi config/queue.php, tetapkan pemacu gilir lalai kepada pemacu lain, seperti "pangkalan data". 🎜rrreee🎜Kemudian, laksanakan arahan berikut dalam terminal untuk mendengar dan melaksanakan tugas baris gilir: 🎜rrreee🎜Pada masa ini, selepas tugasan dimasukkan ke dalam baris gilir dengan memanggil fungsi dispatch, tugasan akan ditambah ke baris gilir, dan Dipantau dan dilaksanakan oleh perintah queue:work. 🎜🎜Ringkasan: 🎜Melalui langkah di atas, kita boleh menggunakan fungsi baris gilir dalam rangka kerja Laravel, dan mengambil tugas menghantar e-mel sebagai contoh untuk memberikan contoh kod yang sepadan. Fungsi baris gilir membolehkan kami mengendalikan tugas latar belakang dengan lebih baik dan meningkatkan keselarasan sistem dan kelajuan tindak balas. Dalam pembangunan sebenar, ia juga boleh digabungkan dengan fungsi lain dan perkhidmatan pihak ketiga untuk mencapai fungsi yang lebih berkuasa. Saya harap artikel ini dapat membantu pembaca memahami dan menggunakan fungsi baris gilir rangka kerja Laravel. 🎜

Atas ialah kandungan terperinci Cara menggunakan fungsi Queue dalam rangka kerja Laravel. 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