Rumah >rangka kerja php >Laravel >Barisan Laravel dan Penjadual Tugas: Memproses Sebilangan Besar Tugasan Secara serentak

Barisan Laravel dan Penjadual Tugas: Memproses Sebilangan Besar Tugasan Secara serentak

王林
王林asal
2023-08-13 09:51:152282semak imbas

Barisan Laravel dan Penjadual Tugas: Memproses Sebilangan Besar Tugasan Secara serentak

Laravel Queue dan Penjadual Tugas: Memproses Sebilangan Besar Tugas Secara serentak

Dalam pembangunan aplikasi web moden, selalunya terdapat senario di mana sejumlah besar tugas perlu diproses. Contohnya, menghantar e-mel, menjana laporan, memproses data besar, dsb. Tetapi apabila jumlah tugasan adalah sangat besar, satu permintaan untuk memproses tugasan ini boleh menyebabkan permintaan itu ditangguhkan untuk masa yang lama atau sumber sistem kehabisan. Untuk menyelesaikan masalah ini, Laravel menyediakan baris gilir dan fungsi penjadual tugas, yang boleh memproses sejumlah besar tugas secara serentak.

1. Laravel Queue

Queue ialah mekanisme yang menolak tugasan ke latar belakang untuk pemprosesan tak segerak Melalui baris gilir, aplikasi kami boleh memproses operasi yang memakan masa di latar belakang tanpa menjejaskan kelajuan tindak balas permintaan pengguna.

Dalam Laravel, kita boleh menggunakan pelbagai kaedah untuk melaksanakan fungsi baris gilir, seperti baris gilir pangkalan data, gilir Redis, gilir Beanstalkd, dll. Di sini, kami mengambil baris gilir pangkalan data sebagai contoh untuk menunjukkan cara melaksanakan fungsi tugas pemprosesan serentak.

  1. Mengkonfigurasi pemacu gilir

Mula-mula, kita perlu mengkonfigurasi pemacu gilir dalam fail konfigurasi Laravel config/queue.php. Kami memilih untuk menggunakan baris gilir pangkalan data, tetapkan pilihan sambungan kepada pangkalan data dan tetapkan beberapa konfigurasi berkaitan sambungan pangkalan data. config/queue.php中配置队列驱动。我们选择使用数据库队列,将connection选项设置为database,以及设置一些数据库连接的相关配置。

'default' => env('QUEUE_CONNECTION', 'database'),
'connections' => [
    'database' => [
        'driver' => 'database',
        'table' => 'jobs',
        'queue' => 'default',
        'retry_after' => 90,
    ],
],

2.创建队列表

接下来,我们需要创建一个用于存储队列任务的数据表。可以使用Laravel提供的Artisan命令php artisan queue:table快速生成迁移文件,并执行迁移。

php artisan queue:table
php artisan migrate
  1. 创建任务类

然后,我们需要创建一个任务类,用于处理具体的任务逻辑。在Laravel中,任务类一般放在app/Jobs目录下,可以通过Artisan命令php artisan make:job快速生成一个任务类。

php artisan make:job SendEmail

生成的任务类SendEmail位于app/Jobs目录下,我们可以在该类的handle方法中编写任务逻辑。

<?php

namespace AppJobs;

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

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

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        // 处理发送邮件的逻辑
        // ...
    }
}

在任务类中,我们需要实现ShouldQueue接口,并定义handle方法来处理任务逻辑。

  1. 推送任务到队列

最后,我们可以通过以下代码将任务推送到队列中。

use AppJobsSendEmail;

SendEmail::dispatch();

通过dispatch方法将任务加入到队列中,系统会自动根据配置选择相应的队列驱动进行处理。

二、Laravel任务调度器

Laravel还提供了一个任务调度器的功能,可以将任务设置为定时执行或者周期性执行。我们可以通过任意的Laravel自带的时间表(Laravel Time Scheduling)来设置任务的执行规则。

  1. 定义任务调度

首先,我们需要在app/Console/Kernel.php文件的schedule方法中定义任务调度。例如,我们定义一个每分钟执行一次的任务。

protected function schedule(Schedule $schedule)
{
    $schedule->job(new SendEmail)->everyMinute();
}

在上述代码中,我们使用了任务类SendEmail作为调度的执行体,然后通过everyMinute方法设置任务执行频率为每分钟一次。

  1. 初始化任务调度

任务调度定义成功之后,我们需要在服务器上设置一个Cron表达式以便执行任务调度。

在Linux系统上,可以通过crontab命令来编辑和设置Cron表达式。

crontab -e

然后,在打开的文件中加入以下代码:

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

上述代码表示每分钟执行一次php artisan schedule:runrrreee

2 Buat jadual giliran

Seterusnya, kita perlu buat jadual data untuk menyimpan tugasan giliran. Anda boleh menggunakan perintah Artisan php artisan queue:table yang disediakan oleh Laravel untuk menjana fail migrasi dan melakukan migrasi dengan cepat.

rrreee

    Buat kelas tugas

    Kemudian, kita perlu mencipta kelas tugas untuk mengendalikan logik tugasan tertentu. Dalam Laravel, kelas tugas biasanya diletakkan dalam direktori app/Jobs Anda boleh menjana kelas tugasan dengan cepat melalui perintah Artisan php artisan make:job.

    rrreee🎜Kelas tugas yang dijana SendEmail terletak dalam direktori app/Jobs Kita boleh menulis logik tugasan dalam kaedah handle kelas ini . 🎜rrreee🎜Dalam kelas tugasan, kita perlu melaksanakan antara muka ShouldQueue dan mentakrifkan kaedah handle untuk mengendalikan logik tugasan. 🎜
      🎜Tolak tugas ke baris gilir🎜🎜🎜Akhir sekali, kita boleh menolak tugasan ke baris gilir melalui kod berikut. 🎜rrreee🎜Tambahkan tugas pada baris gilir melalui kaedah penghantaran dan sistem akan secara automatik memilih pemacu baris gilir yang sepadan untuk diproses mengikut konfigurasi. 🎜🎜2. Laravel Task Scheduler🎜🎜Laravel juga menyediakan fungsi penjadual tugas, yang boleh menetapkan tugasan untuk dilaksanakan secara teratur atau berkala. Kita boleh menetapkan peraturan pelaksanaan tugas melalui mana-mana jadual Laravel sendiri (Laravel Time Scheduling). 🎜🎜🎜Tentukan penjadualan tugas🎜🎜🎜Pertama, kita perlu mentakrifkan penjadualan tugas dalam kaedah jadual fail app/Console/Kernel.php. Sebagai contoh, kami mentakrifkan tugas yang dilaksanakan setiap minit. 🎜rrreee🎜Dalam kod di atas, kami menggunakan kelas tugas SendEmail sebagai badan pelaksanaan jadual, dan kemudian menetapkan kekerapan pelaksanaan tugas kepada sekali seminit melalui everyMinute kaedah. 🎜
        🎜Mulakan penjadualan tugas🎜🎜🎜Selepas penjadualan tugas berjaya ditakrifkan, kita perlu menetapkan ungkapan Cron pada pelayan untuk melaksanakan penjadualan tugas. 🎜🎜Pada sistem Linux, anda boleh mengedit dan menetapkan ungkapan Cron melalui perintah crontab. 🎜rrreee🎜Kemudian, tambahkan kod berikut pada fail yang dibuka: 🎜rrreee🎜Kod di atas bermaksud arahan php artisan schedule:run akan dilaksanakan setiap minit, yang akan mencetuskan penjadualan tugas. 🎜🎜Melalui konfigurasi di atas, kita boleh merealisasikan fungsi pelaksanaan berjadual dan pelaksanaan tugas secara berkala. 🎜🎜Ringkasan: 🎜🎜Melalui fungsi baris gilir Laravel dan penjadual tugas, kita boleh dengan mudah menyedari keperluan untuk memproses sejumlah besar tugas secara serentak. Barisan gilir boleh menolak tugas ke latar belakang untuk pemprosesan tak segerak untuk mengelakkan permintaan pengguna disekat. Penjadual tugas membolehkan tugasan kami dilaksanakan secara tetap atau berkala mengikut peraturan masa, meningkatkan kecekapan pemprosesan tugas. 🎜🎜Di atas adalah pengenalan kepada baris gilir dan penjadual tugas Laravel, saya harap ia akan membantu semua orang! 🎜

Atas ialah kandungan terperinci Barisan Laravel dan Penjadual Tugas: Memproses Sebilangan Besar Tugasan Secara serentak. 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