Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara menggunakan baris gilir (Baris gilir) untuk memproses tugas latar belakang dalam rangka kerja Laravel

Cara menggunakan baris gilir (Baris gilir) untuk memproses tugas latar belakang dalam rangka kerja Laravel

WBOY
WBOYasal
2023-07-28 12:13:461790semak imbas

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.

  1. Mengkonfigurasi Baris Gilir
    Mula-mula, anda perlu mengkonfigurasi pemacu baris gilir dalam fail konfigurasi Laravel. Dalam fail config/queue.php, coretan kod berikut boleh ditemui:
'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,它会立即执行任务而不使用队列。我们需要将其修改为我们想要使用的队列驱动程序,如databaseredis等。以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驱动程序修改为你实际使用的数据库驱动程序,并根据实际情况配置数据库连接信息。

  1. 定义队列任务
    在Laravel框架中,队列任务是通过实现IlluminateContractsQueueShouldQueue接口来定义的。首先,需要创建一个新的队列任务类,例如SendEmailJob
namespace AppJobs;

use IlluminateContractsQueueShouldQueue;
use IlluminateQueueInteractsWithQueue;
use IlluminateQueueSerializesModels;

class SendEmailJob implements ShouldQueue
{
    use InteractsWithQueue, SerializesModels;

    public function __construct()
    {
        //
    }

    public function handle()
    {
        // 处理发送邮件的逻辑
    }
}

在上述代码中,ShouldQueue接口表明这个类是一个队列任务。InteractsWithQueueSerializesModels两个特征可以帮助我们与队列系统进行交互和序列化模型。

handle方法中,我们可以编写具体的任务逻辑。

  1. 分发队列任务
    完成队列任务类的定义后,就可以在应用中分发(dispatch)这些任务了。下面的代码示例演示了如何将SendEmailJob任务分发到队列中:
use AppJobsSendEmailJob;

class SomeController extends Controller
{
    public function sendEmail()
    {
        dispatch(new SendEmailJob());
        // 返回响应或执行其他操作
    }
}

在上述代码中,我们通过dispatch函数将SendEmailJob任务分发到队列中,而不是直接执行。这样可以确保任务在后台异步执行,而不会影响当前请求的响应速度。

  1. 执行队列任务
    最后,我们需要设置任务队列的执行方式。Laravel提供了一个命令行工具php artisan queue:work
    php artisan queue:work
  2. Pada masa yang sama, anda juga perlu mengkonfigurasi maklumat sambungan pangkalan data supaya Laravel boleh menyimpan tugas baris gilir dalam pangkalan data. Teruskan mengubah suai fail config/database.php dan cari coretan kod berikut:
rrreee

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.

    Tentukan tugas baris gilir

    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:

    🎜rrreee🎜Dalam kod di atas, antara muka 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. 🎜
      🎜Mengedarkan tugas baris gilir🎜Selepas melengkapkan definisi kelas tugas baris gilir, anda boleh mengedarkan (menghantar) tugasan ini dalam aplikasi. Contoh kod berikut menunjukkan cara untuk mengagihkan tugas 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!

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