Cara menggunakan baris gilir (Barisan Gilir) dalam rangka kerja Laravel untuk memproses tugas latar belakang
Pengenalan:
Apabila aplikasi web menjadi semakin kompleks, kita sering perlu memproses beberapa tugasan yang memakan masa di latar belakang, seperti menghantar e-mel, imej memproses, menjana laporan, dsb. tunggu. Jika tugasan ini dilakukan secara langsung semasa proses permintaan, pengalaman pengguna akan direndahkan atau permintaan akan tamat masa. Nasib baik, rangka kerja Laravel menyediakan fungsi baris gilir (Queues) yang boleh memproses tugasan yang memakan masa ini secara tidak segerak, dengan itu meningkatkan prestasi aplikasi dan kelajuan tindak balas.
Artikel ini akan memperkenalkan cara menggunakan baris gilir (Baris Gilir) dalam rangka kerja Laravel untuk memproses tugas latar belakang, termasuk konfigurasi baris gilir, definisi tugas dan pelaksanaan, dsb. Contoh kod juga akan disediakan untuk menunjukkan cara konsep ini boleh digunakan dalam amalan.
'default' => env('QUEUE_CONNECTION', 'sync'),
Secara lalai, pemacu baris gilir ialah sync
, yang melaksanakan tugas dengan serta-merta tanpa menggunakan baris gilir. Kami perlu mengubah suainya kepada pemacu baris gilir yang ingin kami gunakan, seperti pangkalan data
, redis
, dsb. Mengambil pemacu pangkalan data
sebagai contoh, anda perlu mengubah suai kod di atas kepada: sync
,它会立即执行任务而不使用队列。我们需要将其修改为我们想要使用的队列驱动程序,如database
、redis
等。以database
驱动程序为例,需要将上述代码修改为:
'default' => env('QUEUE_CONNECTION', 'database'),
同时,还需要配置数据库连接信息,以便Laravel可以将队列任务存储在数据库中。继续修改config/database.php文件,找到以下代码片段:
'connections' => [ 'mysql' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', '127.0.0.1'), // ... ], ],
在这个代码片段中,需要添加一个新的数据库连接配置项,如下所示:
'connections' => [ // ... 'queue' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', '127.0.0.1'), // ... ], ],
将上述代码片段中的mysql
驱动程序修改为你实际使用的数据库驱动程序,并根据实际情况配置数据库连接信息。
IlluminateContractsQueueShouldQueue
接口来定义的。首先,需要创建一个新的队列任务类,例如SendEmailJob
:namespace AppJobs; use IlluminateContractsQueueShouldQueue; use IlluminateQueueInteractsWithQueue; use IlluminateQueueSerializesModels; class SendEmailJob implements ShouldQueue { use InteractsWithQueue, SerializesModels; public function __construct() { // } public function handle() { // 处理发送邮件的逻辑 } }
在上述代码中,ShouldQueue
接口表明这个类是一个队列任务。InteractsWithQueue
和SerializesModels
两个特征可以帮助我们与队列系统进行交互和序列化模型。
在handle
方法中,我们可以编写具体的任务逻辑。
SendEmailJob
任务分发到队列中:use AppJobsSendEmailJob; class SomeController extends Controller { public function sendEmail() { dispatch(new SendEmailJob()); // 返回响应或执行其他操作 } }
在上述代码中,我们通过dispatch
函数将SendEmailJob
任务分发到队列中,而不是直接执行。这样可以确保任务在后台异步执行,而不会影响当前请求的响应速度。
php artisan queue:work
php artisan queue:work
Dalam coretan kod ini, anda perlu menambah item konfigurasi sambungan pangkalan data baharu, seperti yang ditunjukkan di bawah:
rrreee Tukar mysql in coretan kod di atas
Ubah suai pemacu kepada pemacu pangkalan data yang sebenarnya anda gunakan, dan konfigurasikan maklumat sambungan pangkalan data mengikut situasi sebenar.
Dalam rangka kerja Laravel, tugasan baris gilir ditakrifkan dengan melaksanakan antara muka IlluminateContractsQueueShouldQueue
. Mula-mula, anda perlu mencipta kelas tugas baris gilir baharu, seperti SendEmailJob
:
ShouldQueue
menunjukkan bahawa kelas ini ialah tugas baris gilir . Dua ciri InteractsWithQueue
dan SerializesModels
boleh membantu kami berinteraksi dengan sistem baris gilir dan mensirikan model. 🎜🎜Dalam kaedah handle
, kita boleh menulis logik tugasan tertentu. 🎜SendEmailJob
ke baris gilir: 🎜🎜rrreee🎜Dalam kod di atas, kami lulus fungsi SendEmailJob
melalui dispatch function >Tasks dihantar ke baris gilir dan bukannya dilaksanakan secara terus. Ini memastikan bahawa tugas itu dilaksanakan secara tak segerak di latar belakang tanpa menjejaskan kelajuan tindak balas permintaan semasa. 🎜<ol start="4">🎜Laksanakan tugas baris gilir🎜Akhir sekali, kita perlu menetapkan kaedah pelaksanaan baris gilir tugas. Laravel menyediakan alat baris perintah <code>php artisan queue:work
untuk melaksanakan tugasan baris gilir. Jalankan arahan ini dalam terminal untuk mula memproses tugas dalam baris gilir. 🎜🎜rrreee🎜Selain itu, anda juga boleh menggunakan alatan seperti Supervisor untuk memantau proses giliran bagi memastikan tugasan dapat dilaksanakan secara berterusan. 🎜🎜Ringkasan: 🎜Menggunakan baris gilir (Barisan Gilir) untuk memproses tugas latar belakang dalam rangka kerja Laravel ialah cara yang berkesan untuk meningkatkan prestasi aplikasi dan kelajuan tindak balas. Pemprosesan tak segerak bagi tugas latar belakang boleh dicapai dengan mengkonfigurasi baris gilir, mentakrifkan tugas baris gilir, mengagihkan tugas dan melaksanakan tugas. 🎜🎜Saya harap artikel ini dapat membantu pembaca memahami cara menggunakan baris gilir dalam rangka kerja Laravel untuk mengendalikan tugas latar belakang dan membantu pembaca menggunakan konsep ini dengan lebih baik melalui contoh kod. 🎜Atas ialah kandungan terperinci Cara menggunakan baris gilir (Baris gilir) untuk memproses tugas latar belakang dalam rangka kerja Laravel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!