Rumah  >  Artikel  >  rangka kerja php  >  Menggunakan Laravel untuk Pemprosesan Baris Gilir dan Penjadualan Tugas: Meningkatkan Prestasi Aplikasi

Menggunakan Laravel untuk Pemprosesan Baris Gilir dan Penjadualan Tugas: Meningkatkan Prestasi Aplikasi

WBOY
WBOYasal
2023-08-13 18:29:031597semak imbas

Menggunakan Laravel untuk Pemprosesan Baris Gilir dan Penjadualan Tugas: Meningkatkan Prestasi Aplikasi

Menggunakan Laravel untuk Pemprosesan Baris Gilir dan Penjadualan Tugas: Meningkatkan Prestasi Aplikasi

Pengenalan:
Dalam pembangunan aplikasi moden, prestasi adalah isu yang sangat kritikal. Apabila bilangan pengguna meningkat dan jumlah data meningkat, aplikasi mungkin menghadapi cabaran untuk mengendalikan sejumlah besar permintaan. Untuk meningkatkan prestasi dan pemprosesan aplikasi, kami boleh menggunakan pemprosesan baris gilir dan penjadualan tugas.

Laravel ialah rangka kerja PHP popular yang menyediakan pemprosesan baris gilir yang berkuasa dan fungsi penjadualan tugas. Dalam artikel ini, kami akan memperkenalkan cara menggunakan ciri baris gilir dan penjadualan tugas Laravel untuk meningkatkan prestasi aplikasi anda.

1. Apakah pemprosesan baris gilir dan penjadualan tugas?
Pemprosesan baris gilir dan penjadualan tugas ialah kaedah mengasingkan tugas daripada aplikasi utama dan memprosesnya secara tidak segerak. Dalam aplikasi, terdapat beberapa tugasan yang mungkin mengambil masa yang lama untuk diselesaikan, seperti menghantar e-mel, memproses imej, menjana laporan, dsb. Jika anda melaksanakan tugasan ini dalam aplikasi utama, ia akan menyebabkan masa tindak balas aplikasi menjadi lebih perlahan, menjejaskan pengalaman pengguna.

Pemprosesan baris gilir adalah untuk meletakkan tugasan ini ke dalam baris gilir, dan kemudian memprosesnya satu demi satu oleh pengendali baris gilir latar belakang. Dengan cara ini, aplikasi utama boleh bertindak balas dengan cepat kepada permintaan pengguna, manakala tugasan diproses secara tak segerak di latar belakang.

Penjadualan tugas ialah kaedah melaksanakan tugas dengan kerap. Sesetengah tugasan tidak perlu dilaksanakan dengan segera, tetapi perlu dilakukan pada selang waktu tertentu atau pada masa tertentu, seperti menjana laporan harian, sandaran tetap, dsb. Melalui penjadualan tugasan, kita boleh membiarkan Laravel melaksanakan tugasan pada titik tertentu dalam masa tanpa mencetuskannya secara manual.

2. Konfigurasi dan penggunaan pemprosesan baris gilir

  1. Mengkonfigurasi pemacu baris gilir
    Dalam Laravel, kami boleh menentukan pemacu yang hendak digunakan untuk memproses baris gilir melalui fail konfigurasi. Buka fail config/queue.php dan tetapkan QUEUE_DRIVER kepada pangkalan data, yang bermaksud kami akan menggunakan pemacu pangkalan data untuk mengendalikan baris gilir.
  2. config/queue.php 文件,将 QUEUE_DRIVER 设置为 database,表示我们将使用数据库驱动来处理队列。
  3. 创建队列表
    运行以下命令,创建数据库迁移文件:
php artisan queue:table

然后运行迁移命令:

php artisan migrate

这会在数据库中创建一个 jobs 表,用来存储队列任务。

  1. 定义任务类
    我们需要创建一个类来定义具体的队列任务。在 app/Jobs 目录下,创建一个新的文件 SendEmailJob.php,并在文件中定义如下代码:
<?php

namespace AppJobs;

use IlluminateBusQueueable;
use IlluminateContractsQueueShouldQueue;
use IlluminateFoundationBusDispatchable;
use IlluminateMailMailable;
use IlluminateQueueInteractsWithQueue;
use IlluminateQueueSerializesModels;
use IlluminateSupportFacadesMail;

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

    protected $email;
    protected $subject;
    protected $body;

    public function __construct($email, $subject, $body)
    {
        $this->email = $email;
        $this->subject = $subject;
        $this->body = $body;
    }

    public function handle()
    {
        Mail::to($this->email)->send(new Mailable($this->subject, $this->body));
    }
}

这个类继承了 ShouldQueue 接口,表明这是一个可以放入队列的任务。在 handle() 方法中,我们可以定义具体的任务逻辑,比如发送电子邮件。

  1. 将任务放入队列
    在需要执行任务的地方,可以通过以下代码将任务放入队列:
use AppJobsSendEmailJob;

$job = new SendEmailJob('example@example.com', 'Hello', 'Welcome to Laravel!');
dispatch($job);

这样,这个任务就会被放入队列中等待执行。

  1. 队列处理
    为了执行队列中的任务,我们需要在后台运行队列处理程序。在命令行中,运行以下命令:
php artisan queue:work --tries=3

这会启动一个后台进程,它会从队列中取出任务并执行。--tries 参数表示任务执行失败时的重试次数。如果任务执行失败超过指定的次数,将被放回队列等待处理。

三、任务调度的配置和使用

  1. 配置任务调度
    打开 app/Console/Kernel.php 文件,在 schedule 方法中定义我们的任务调度计划。例如,我们可以在每天早上 6 点执行一个任务:
protected function schedule(Schedule $schedule)
{
    $schedule->job(new SendDailyReportJob)->dailyAt('06:00');
}

以上代码表示,在每天的早上 6 点执行 SendDailyReportJob 这个任务。

  1. 启用任务调度
    我们还需要在服务器上设置一个 Cron 任务,以便 Laravel 可以自动执行任务调度计划。打开服务器的终端,并运行以下命令:
crontab -e

然后在文件中添加以下内容:

* * * * * php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1

这会让 Cron 每分钟执行一次 schedule:runBuat jadual gilir

Jalankan arahan berikut untuk mencipta fail pemindahan pangkalan data: rrreee

Kemudian jalankan arahan migrasi:
rrreee

Ini akan mewujudkan kerja kod dalam pangkalan data > Jadual, digunakan untuk menyimpan tugas baris gilir.

    Tentukan kelas tugasan🎜Kita perlu mencipta kelas untuk menentukan tugas baris gilir tertentu. Dalam direktori app/Jobs, buat fail baharu SendEmailJob.php dan tentukan kod berikut dalam fail:
rrreee🎜Kelas ini Mewarisi antara muka ShouldQueue, menunjukkan bahawa ini adalah tugas yang boleh dimasukkan ke dalam baris gilir. Dalam kaedah handle(), kita boleh menentukan logik tugasan tertentu, seperti menghantar e-mel. 🎜
    🎜Letakkan tugasan ke dalam baris gilir🎜Di mana tugasan perlu dilaksanakan, anda boleh meletakkan tugasan ke dalam baris gilir melalui kod berikut:
rrreee🎜Dalam ini cara, tugas itu akan Letakkan dalam baris gilir dan tunggu untuk pelaksanaan. 🎜
    🎜Pengendalian Baris🎜Untuk melaksanakan tugasan dalam baris gilir, kita perlu menjalankan pengendali giliran di latar belakang. Daripada baris arahan, jalankan arahan berikut:
rrreee🎜Ini akan memulakan proses latar belakang yang akan mengambil tugas daripada baris gilir dan melaksanakannya. Parameter --try menunjukkan bilangan percubaan semula apabila pelaksanaan tugas gagal. Jika tugas gagal dilaksanakan lebih daripada bilangan kali yang ditetapkan, ia akan dimasukkan semula ke dalam baris gilir untuk menunggu pemprosesan. 🎜🎜3. Konfigurasi dan penggunaan penjadualan tugas🎜🎜🎜Konfigurasikan penjadualan tugas🎜Buka fail app/Console/Kernel.php dan tentukan jadual tugas kami dalam kaedah schedule rancangan. Contohnya, kita boleh melaksanakan tugas pada pukul 6 pagi setiap hari: rrreee🎜Kod di atas menunjukkan bahawa tugasan SendDailyReportJob akan dilaksanakan pada pukul 6 pagi setiap hari. 🎜
    🎜Dayakan penjadualan tugas🎜Kami juga perlu menyediakan tugas Cron pada pelayan supaya Laravel boleh melaksanakan pelan penjadualan tugas secara automatik. Buka terminal pelayan dan jalankan arahan berikut:
rrreee🎜Kemudian tambah kandungan berikut pada fail: 🎜rrreee🎜Ini akan menyebabkan Cron melaksanakan perintah schedule:run setiap minit, semak dan laksanakan pelan penjadualan tugas. 🎜🎜Ringkasan: 🎜Laravel menyediakan pemprosesan baris gilir yang berkuasa dan fungsi penjadualan tugas yang boleh membantu kami meningkatkan prestasi aplikasi dan pemprosesan. Dengan meletakkan tugasan yang memakan masa ke dalam baris gilir dan memprosesnya secara tidak segerak melalui pengendali baris gilir latar belakang, anda boleh mengurangkan masa tindak balas aplikasi utama dan meningkatkan pengalaman pengguna. Melalui fungsi penjadualan tugas, kami boleh melaksanakan beberapa tugas dengan kerap untuk meningkatkan kecekapan pembangunan. 🎜🎜Saya harap artikel ini dapat membantu anda memahami dan menggunakan pemprosesan baris gilir dan fungsi penjadualan tugas Laravel, seterusnya meningkatkan prestasi aplikasi anda. Terima kasih! 🎜

Atas ialah kandungan terperinci Menggunakan Laravel untuk Pemprosesan Baris Gilir dan Penjadualan Tugas: Meningkatkan Prestasi Aplikasi. 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