laravel的队列

关于队列的一些步骤

队列主要用于一些预发事件的处理,比如期望在今天凌晨的时候处理的事情,就可以用到队列

一 队列的相关命令行

生成队列所需要的表,注意:执行前先看mysql表是否有相应的表格==》jobs

#生成所需要的表jobs
php artisan queue:table
#将生成的表jobs在数据库中实现
php artisan migrate

生成队列文件,注意:此命令行会生成app/jobs/JPushQueue.php,只需要在此文件下增加相应的逻辑即可

#生成队列文件,在目录 app/Jobs 下
php artisan make:job JPushQueue

重启队列,注意:由于队列是挂在定时任务里的进程,他在执行的过程中并不会注意到你的代码的修改,只有重启队列后,才可以重新加载新加入的队列逻辑

#重启队列
php artisan queue:restart

开启队列监听,注意:开启监听用于本地测试,线上代码结合console管理

#开启队列监听
php artisan queue:work

console管理

#将任务加入服务器的定时函数管理
crontab -e
#定时函数管理脚本里增加以下语句,注意/path-to-your-project 是你的项目路径
* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1

同时在App\Console\Kernel.php 中增加你的job任务监听命令

/* jPush的定时任务 */
$schedule->job(new JPushQueue())->everyMinute();

二 队列的相关代码和文件

JPushQueue文件的相关操作
当生成JPushQueue文件后,需要在对应的文件中增加相关的队列逻辑,命令行生成的job在目录App\Jobs下,此目录会增加一个文件JPushQueue.php,可以修改增加相关逻辑,如下所示:

<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;

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

    /**
     * 任务可尝试最大次数
     *
     * @var int
     */
    public $tries = 5;

    /**
     * 如果模型缺失即删除任务
     *
     * @var bool
     */
    public $deleteWhenMissingModels = true;

    protected $paramData;

    /** 
     * Create a new job instance.参数注入的逻辑放在这里
     * @param array $paramData
     * @return void
     */
    public function __construct($paramData = [])
    {
        $this->paramData = $paramData;
    }

    /**
     * Execute the job.
     * @return bool
     * @throws \Exception
     */
    public function handle()
    {
        //相关推送逻辑,此处增加你的相关逻辑即可

        return true;
    }

    /**
     * 任务失败的处理过程
     *
     * @param \Exception $exception
     */
    public function failed(\Exception $exception)
    {
        //
    }
}

队列的使用
你可以在你的代码中使用队列的方法,这里主要用于延迟发送消息。

use App\Jobs\JPushQueue;

$param_data = [];
//推送用队列的方式
JPushQueue::dispatch($param_data)->delay(now()->addSeconds(1));

注意:并不是发送队列后就能成功执行队列中的逻辑,你需要按照步骤一,重载队列任务,开启队列监听

再次感谢我的leader,给我足够的空闲时间来慢慢看文档写逻辑,希望每天都这么空闲

本作品采用《CC 协议》,转载必须注明作者和本文链接
我家有猫了
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!