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 协议》,转载必须注明作者和本文链接