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-12 20:18:251578semak 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:
Dengan pembangunan aplikasi, kami sering menghadapi cabaran untuk mengendalikan sejumlah besar tugas dan permintaan. Untuk meningkatkan prestasi aplikasi dan responsif, rangka kerja Laravel menyediakan pemprosesan baris gilir dan sistem penjadualan tugas yang berkuasa. Artikel ini akan memperkenalkan cara menggunakan fungsi baris gilir Laravel untuk mengendalikan tugas tak segerak dan menjadualkan tugas berulang untuk meningkatkan prestasi dan kestabilan aplikasi.

1. Pengenalan kepada Fungsi Baris Laravel
Laravel menyediakan perkhidmatan baris gilir dengan abstraksi yang baik, yang boleh menambah tugasan yang perlu dilaksanakan secara tidak segerak pada baris gilir, dan kemudian memprosesnya dengan proses latar belakang atau pekerja baris gilir. Mod pelaksanaan tugas tak segerak ini dipanggil "baris gilir", yang boleh memisahkan beberapa tugas bukan masa nyata atau memakan masa secara berkesan daripada proses permintaan utama, membolehkan aplikasi bertindak balas kepada permintaan dengan lebih pantas.

Kelebihan baris gilir Laravel:

  1. Pelaksanaan tak segerak: Selepas menambah tugasan pada baris gilir, respons boleh dikembalikan kepada pengguna serta-merta, manakala tugasan akan dilaksanakan secara tak segerak di latar belakang.
  2. Meningkatkan keselarasan: Memandangkan tugasan dimasukkan ke dalam baris gilir, berbilang tugasan boleh diproses pada masa yang sama, meningkatkan keupayaan pemprosesan serentak aplikasi.
  3. Pemprosesan tahan kesalahan: Apabila pelaksanaan tugas gagal, Laravel akan meletakkan semula tugasan itu ke dalam baris gilir untuk memastikan tugasan itu dapat dilaksanakan dengan jayanya.
  4. Selamat dan stabil: Dengan meletakkan tugasan ke dalam baris gilir, beberapa operasi sensitif atau memakan masa boleh dielakkan daripada menyekat proses permintaan biasa.
  5. Sokongan perkhidmatan mikro: Perkhidmatan baris gilir boleh dipisahkan daripada perkhidmatan mikro lain untuk meningkatkan kebolehskalaan aplikasi.

2 Konfigurasikan baris gilir Laravel

  1. Konfigurasikan pemacu
    Dalam fail konfigurasi Laravel config/queue.php, anda boleh mengkonfigurasi pemacu baris gilir. Laravel menyokong pelbagai jenis pemacu baris gilir, seperti pangkalan data, redis, beanstalkd, dsb. config/queue.php中,可以配置队列的驱动程序。Laravel支持多种类型的队列驱动程序,如database、redis、beanstalkd等。

示例配置:

'default' => env('QUEUE_CONNECTION', 'redis'),
'connections' => [
    // Redis 驱动配置
    'redis' => [
        'driver' => 'redis',
        'connection' => 'default',
        'queue' => env('Redis_QUEUE', 'default'),
        'retry_after' => 90,
        'block_for' => null,
    ],
],
  1. 启动队列工作人员
    在Laravel中,队列任务需要由队列工作人员(Queue Worker)来执行。可以使用Laravel自带的Artisan命令php artisan queue:work来启动队列工作人员,并根据需要进行配置。

示例命令:

php artisan queue:work --queue=queue-name --tries=3

该命令将启动一个队列工作人员,监听指定的队列(queue-name),并在任务执行失败时最多尝试3次。

三、使用Laravel队列处理任务

  1. 创建并分发任务
    首先,我们需要创建一个任务类。可以使用Laravel自带的Artisan命令php artisan make:job来创建一个新的队列任务类。

示例任务类:

<?php

namespace AppJobs;

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

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

    protected $podcast;

    /**
     * Create a new job instance.
     *
     * @param  Podcast  $podcast
     * @return void
     */
    public function __construct(Podcast $podcast)
    {
        $this->podcast = $podcast;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        // 处理任务逻辑
    }
}

通过实现ShouldQueue接口,该任务类将成为一个可以被队列处理的任务类。

然后,我们可以使用队列的dispatch方法来将任务分发到队列中,等待异步处理。

示例分发任务:

use AppJobsProcessPodcast;

ProcessPodcast::dispatch($podcast);
  1. 监听队列并执行任务
    当队列工作人员启动后,它会监听指定的队列,一旦有新的任务进入队列,就会执行任务的handle方法。

在任务的handle方法中,编写需要异步执行的逻辑代码。

示例任务处理逻辑:

public function handle()
{
    // 执行异步任务
    // ...
    // 执行完成后,任务将从队列中移除
}

通过以上步骤,我们就可以实现将需要异步执行的任务添加到队列中,并由队列工作人员来处理执行。

四、使用Laravel任务调度功能
除了队列处理功能以外,Laravel还提供了任务调度功能,能够定期执行某个任务或者重复执行指定次数的任务。

  1. 创建任务调度
    使用Laravel自带的Artisan命令php artisan make:command来创建一个任务调度类。

示例任务调度类:

<?php

namespace AppConsoleCommands;

use IlluminateConsoleCommand;

class SendEmails extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'emails:send';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Send reminder emails to all users';

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        // 任务调度逻辑
    }
}
  1. 配置任务调度
    在Laravel的配置文件app/Console/Kernel.php中,可以配置要定期执行的任务调度和调度频率。

示例配置:

protected $commands = [
    CommandsSendEmails::class,
];

protected function schedule(Schedule $schedule)
{
    $schedule->command('emails:send')
             ->dailyAt('01:00');
}

上述配置表示每天在凌晨1点执行emails:send

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

      Mulakan pekerja beratur
  2. Dalam Laravel, tugasan baris gilir perlu dilaksanakan oleh pekerja baris gilir (Pekerja Beratur). Anda boleh menggunakan perintah Artisan Laravel sendiri php artisan queue:work untuk memulakan pekerja baris gilir dan mengkonfigurasinya mengikut keperluan.

Arahan contoh:

rrreee

Arahan ini akan memulakan pekerja baris gilir, mendengar baris gilir yang ditentukan (nama baris gilir), dan cuba sehingga 3 kali jika pelaksanaan tugas gagal.


3 Gunakan baris gilir Laravel untuk memproses tugasan

🎜🎜Buat dan agihkan tugasan🎜Pertama, kita perlu mencipta kelas tugas. Anda boleh menggunakan arahan Artisan Laravel sendiri php artisan make:job untuk mencipta kelas tugas baris gilir baharu. 🎜🎜🎜Contoh kelas tugas: 🎜rrreee🎜Dengan melaksanakan antara muka ShouldQueue, kelas tugas ini akan menjadi kelas tugas yang boleh diproses oleh baris gilir. 🎜🎜Kemudian, kita boleh menggunakan kaedah penghantaran baris gilir untuk mengagihkan tugas kepada baris gilir dan menunggu pemprosesan tak segerak. 🎜🎜Contoh tugas pengedaran: 🎜rrreee
    🎜Dengar baris gilir dan laksanakan tugas🎜Apabila pekerja baris gilir bermula, ia akan mendengar baris gilir yang ditentukan, dan sebaik sahaja tugas baharu memasuki baris gilir, ia akan melaksanakan kaedah handle tugas. 🎜🎜🎜Dalam kaedah handle tugasan, tulis kod logik yang perlu dilaksanakan secara tidak segerak. 🎜🎜Contoh logik pemprosesan tugas: 🎜rrreee🎜Melalui langkah di atas, kita boleh menambah tugasan yang perlu dilaksanakan secara tidak segerak pada baris gilir, dan pekerja baris gilir akan mengendalikan pelaksanaan. 🎜🎜4. Gunakan fungsi penjadualan tugas Laravel🎜Selain fungsi pemprosesan baris gilir, Laravel juga menyediakan fungsi penjadualan tugas, yang boleh melaksanakan tugas dengan kerap atau mengulangi tugasan beberapa kali. 🎜🎜🎜Buat penjadualan tugas🎜Gunakan arahan Artisan Laravel sendiri php artisan make:command untuk mencipta kelas penjadualan tugas. 🎜🎜🎜Contoh kelas penjadualan tugas: 🎜rrreee
      🎜Mengkonfigurasi penjadualan tugas🎜Dalam fail konfigurasi Laravel app/Console/Kernel.php, anda boleh mengkonfigurasi tugasan untuk dilaksanakan dengan kerap Penjadualan tugas dan kekerapan penjadualan. 🎜🎜🎜Contoh konfigurasi: 🎜rrreee🎜Konfigurasi di atas menunjukkan bahawa tugas email:send dilaksanakan pada jam 1 pagi setiap hari. 🎜🎜🎜Mulakan penjadual tugas🎜Tambahkan arahan untuk melaksanakan penjadual tugas Laravel secara kerap dalam crontab pelayan supaya tugasan yang dijadualkan dapat dilaksanakan dengan kerap. 🎜🎜🎜Contoh arahan crontab: 🎜rrreee🎜Melalui langkah di atas, kami boleh melaksanakan tugas dengan kerap atau mengulangi tugas beberapa kali tertentu, dengan itu meningkatkan automasi dan kestabilan aplikasi. 🎜🎜Kesimpulan: 🎜Melalui pemprosesan baris gilir dan fungsi penjadualan tugas Laravel, kami boleh memisahkan beberapa tugasan yang memakan masa dan tugasan berulang daripada proses permintaan utama, meningkatkan prestasi dan responsif aplikasi. Pada masa yang sama, ia juga menyediakan mekanisme pemprosesan pengecualian dan toleransi kesalahan untuk memastikan tugasan dapat dilaksanakan dengan jayanya dan memastikan kestabilan aplikasi. Saya harap kandungan artikel ini dapat membantu anda menggunakan Laravel dengan lebih baik untuk meningkatkan prestasi dan kestabilan aplikasi anda. 🎜

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