Rumah > Artikel > rangka kerja php > Mesej Beratur dalam Laravel: Menyahganding Pemprosesan Tugas Asynchronous
Mesej Beratur dalam Laravel: Menyahganding Pemprosesan Tugas Asynchronous
Pengenalan:
Dalam pembangunan web, cara mengendalikan tugas yang memakan masa adalah masalah biasa. Pendekatan tradisional adalah untuk melaksanakan tugas secara langsung semasa pemprosesan permintaan web, tetapi pendekatan ini akan menyebabkan masa tindak balas permintaan menjadi perlahan, dan ia terdedah kepada masalah tidak dapat mencuba semula apabila tugasan gagal. Untuk menyelesaikan masalah ini, baris gilir mesej boleh digunakan untuk pemprosesan tugas tak segerak. Rangka kerja Laravel menyediakan fungsi baris gilir yang mudah digunakan dan berkuasa Artikel ini akan memperkenalkan cara menggunakan baris gilir mesej dalam Laravel untuk memisahkan pemprosesan tugas tak segerak.
1. Mengapa menggunakan baris gilir mesej
Menggunakan baris gilir mesej mempunyai kelebihan utama berikut:
2. Konfigurasi asas sistem baris gilir Laravel
Dalam Laravel, menggunakan fungsi baris gilir memerlukan beberapa konfigurasi asas. Pertama, anda perlu mengkonfigurasi pemacu baris gilir dalam fail konfigurasi Laravel Anda boleh memilih untuk menggunakan pangkalan data, Redis, dll. sebagai storan baris gilir. Tambahkan konfigurasi berikut pada fail .env
: .env
文件中:
QUEUE_CONNECTION=database
然后,在Laravel的数据库迁移文件中添加用于存储队列任务的数据表。可以使用以下命令生成迁移文件:
php artisan queue:table
生成的迁移文件中会包含一个名为jobs
的数据表。
接下来,运行迁移命令来创建数据表:
php artisan migrate
三、定义队列任务
在Laravel中,队列任务是通过继承IlluminateContractsQueueShouldQueue
接口并实现handle
方法来定义的。下面是一个示例的队列任务定义:
<?php namespace AppJobs; use IlluminateBusQueueable; use IlluminateContractsQueueShouldQueue; use IlluminateFoundationBusDispatchable; use IlluminateQueueInteractsWithQueue; use IlluminateQueueSerializesModels; class ProcessPodcast implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; protected $podcast; public function __construct($podcast) { $this->podcast = $podcast; } public function handle() { // 处理耗时的任务 // 例如,发送邮件、生成报表等 } }
在handle
方法中编写具体的任务逻辑。其中,ShouldQueue
接口和Dispatchable
、InteractsWithQueue
、Queueable
、SerializesModels
这几个特质是Laravel队列系统所需的。
四、触发任务
要触发一个队列任务,可以使用dispatch
方法。下面是一个触发任务的示例代码:
<?php use AppJobsProcessPodcast; use IlluminateHttpRequest; class PodcastController extends Controller { public function store(Request $request) { // 处理其他的请求逻辑 ProcessPodcast::dispatch($podcast) ->delay(now()->addMinutes(10)); } }
这里,我们使用dispatch
方法触发了一个ProcessPodcast
任务,并可以设置任务的延迟执行时间。
五、任务的监听与执行
Laravel提供了queue:listen
命令来监听并执行队列任务。可以在终端中运行以下命令来启动队列监听器:
php artisan queue:listen
队列监听器将会不断地监听队列并执行任务。
六、重试机制
Laravel队列系统提供了对失败任务的重试机制。如果任务执行失败,队列监听器会自动将其重新放入队列,并根据配置的重试次数进行重试。可以在.env
QUEUE_TRIES=3Kemudian, tambahkan jadual data yang digunakan untuk menyimpan tugas baris gilir dalam fail pemindahan pangkalan data Laravel. Anda boleh menggunakan arahan berikut untuk menjana fail migrasi:
rrreee
Fail migrasi yang dijana akan mengandungi jadual data bernamajobs
.
Seterusnya, jalankan arahan migrasi untuk mencipta jadual data:
IlluminateContractsQueueShouldQueue
dan laksanakan kaedah handle
untuk menentukan. Berikut ialah contoh definisi tugasan baris gilir: 🎜rrreee🎜Tulis logik tugasan tertentu dalam kaedah handle
. Antaranya, antara muka ShouldQueue
dan Dispatchable
, InteractsWithQueue
, Queueable
, SerializesModels
Traits diperlukan oleh sistem giliran Laravel. 🎜🎜4. Mencetuskan tugas🎜Untuk mencetuskan tugas baris gilir, anda boleh menggunakan kaedah dispatch
untuk mencetuskan tugas ProcessPodcast
dan boleh menetapkan masa pelaksanaan tertunda bagi tugasan. 🎜🎜5. Pemantauan dan pelaksanaan tugas🎜Laravel menyediakan perintah queue:listen
untuk memantau dan melaksanakan tugasan baris gilir. Anda boleh menjalankan arahan berikut dalam terminal untuk memulakan pendengar baris gilir: 🎜rrreee🎜Pendengar baris gilir akan terus mendengar baris gilir dan melaksanakan tugas. 🎜🎜 6. Mekanisme cuba semula 🎜 Sistem baris gilir Laravel menyediakan mekanisme cuba semula untuk tugasan yang gagal. Jika pelaksanaan tugas gagal, pendengar baris gilir akan meletakkannya semula secara automatik ke dalam baris gilir dan cuba lagi mengikut bilangan percubaan semula yang dikonfigurasikan. Bilangan percubaan semula boleh dikonfigurasikan dalam fail .env
: 🎜rrreee🎜Konfigurasi di sini menunjukkan bahawa tugasan akan dicuba semula sehingga 3 kali selepas kegagalan. 🎜🎜7. Ringkasan🎜Dengan menggunakan sistem baris gilir Laravel, kami boleh melaksanakan pemprosesan tugas tak segerak dengan mudah. Dengan meletakkan tugas dalam baris gilir mesej, penyahgandingan tugas, pemprosesan tak segerak dan percubaan semula kegagalan boleh dicapai, meningkatkan prestasi dan kebolehpercayaan aplikasi web. Di atas ialah pengenalan asas untuk menggunakan baris gilir mesej untuk pemprosesan tugas tak segerak dalam Laravel. Saya harap ia akan membantu anda. 🎜Atas ialah kandungan terperinci Mesej Beratur dalam Laravel: Menyahganding Pemprosesan Tugas Asynchronous. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!