laravel官网地址:https://learnku.com/docs/laravel/5.5/queues/1324
写之前先确保自己的本地redis是开启的状态。不然会报连接失败的。
一、驱动
队列里面有两种驱动:数据库与redis,以前项目里面用到过数据库的,那这次咱们换redis的驱动
1.在.env里面把QUEUE_DRIVER设置是为redis就可以了
2.redis的配置
二、创建任务
1.生成任务类
php artisan make:job SendReminderEmail
执行完上面的命令行以后,目录里自动创建一个SendReminderEmail的任务类
2. 业务逻辑
不管是发送邮件也好,或者是处理订单也好,都会带一个参数过来,那咱们就简单的带一个参数过来,然后看一下打印得到结果
<?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;
use Exception;
class SendReminderEmail implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $param;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct(Array $array)
{
$this->param = $array;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
info("我是一个任务类,执行队列里面的内容====================", [$this->param]);
}
/**
* 要处理的失败任务。
*
* @param Exception $exception
* @return void
*/
public function failed(Exception $exception)
{
// 给用户发送失败通知,等等...
info("队列异常".get_class($this).':'.__FILE__.':', [$exception]);
}
}
3.分发任务
SendReminderEmail::dispatch(["order_no"=>"1111111"]);
4.开启队列监听
php artisan queue:work --tries=3
5.执行分发任务
看一眼最后的打印结果,棒棒哒的,一个简单的队列就完成了,其实很简单的,大家一起加油……
注意
Redis 里面一个任务默认最多执行60秒,如果一个任务60秒没有执行完毕,会继续放回到队列中,循环执行,那酸爽