Rumah > Artikel > pembangunan bahagian belakang > Cara menggunakan fungsi Queue dalam rangka kerja Laravel
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)Dispatchable
、InteractsWithQueue
、Queueable
、SerializesModels
提供了对队列的操作和对象序列化等支持。
三、任务入队
在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框架中,可以使用两种方法执行队列任务:同步执行和异步执行。
同步执行是指任务在当前请求中立即执行,不经过队列驱动器的处理。在配置文件config/queue.php
中,将默认的队列驱动器设为“sync”即可。
'default' => env('QUEUE_DRIVER', 'sync'),
此时,通过调用dispatch
函数将任务入队后,任务将会在当前请求中立即执行。
异步执行是指任务由队列驱动器负责处理和执行。在配置文件config/queue.php
中,将默认的队列驱动器设为其他驱动器,例如“database”。
'default' => env('QUEUE_DRIVER', 'database'),
然后,在终端中执行以下命令,监听并执行队列任务:
php artisan queue:work
此时,通过调用dispatch
函数将任务入队后,任务将被添加到队列中,并由queue:work
rrreee
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
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 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. 🎜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. 🎜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!