Laravel队列的用法

laravel队列 可分为【同步队列】和【延时队列】两种
一,默认QUEUE_DRIVER=sync 是同步的,使用delay延时队列不能使用同步的,否则不起作用。
要想使用延时队列必须把 QUEUE_DRIVER设置成 redis 或者 datebase 延迟才起作用

二,一般什么情况下会用到延迟队列呢?举个栗子(商城用户生成订单后没有付款三十分钟后取消订单,这个时候用延时队列来处理岂不快哉,或者群发邮件短信等一些耗时的操作时就需要用到延时队列,这样就可以减轻服务器的压力,减少等待时间)

三,创建任务类

php artisan make:job  SendReminderEmail

执行上面命令生成 Jobs/SendReminderEmail.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 SendReminderEmail implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
    protected $mail;
    public $tries = 5;

    /**
     * SendReminderEmail constructor.
     * @param $mail
     */
    public function __construct($mail)
    {
        $this->mail = $mail;
    }

    /**
     * Execute the job.
     * @return void
     */
    public function handle()
    {
           echo $this->mail;
    }
}

四,先来看一下时时队列
自己创建路由及方法并访问,把任务塞进队列,打印查看数据。

public function index()
    {
        $res = SendReminderEmail::dispatch('123@qq.com');
        dd($res);
    }

在这里插入图片描述

五,延时队列的用法
1,修改evn文件中

QUEUE_DRIVER=redis
每次修改代码都需要执行  
 php artisan queue:restart   命令!

然后再次执行   
 php artisan queue:work  命令!

这两个命令是重点哦!敲黑板划重点!!  不然你都找不出错误的原因
然后开启监听
执行   php artisan queue:listen  命令!

指定任务
php artisan queue:work --queue=change_user_chief

2,访问自己的路由及方法,将任务塞进队列;
我这里面设置的是将任务延迟3秒分发;

public function index()
    {
        $res = SendReminderEmail::dispatch('66666@qq.com')->delay(3);
        dd($res);
    }

3,查看监听,访问路由三秒钟后会出现下图结果在这里插入图片描述
六,队列不仅可以延迟执行,而且还可以设置执行的时间和执行失败的次数

<?php
namespace App\Jobs;
class SendReminderEmail implements ShouldQueue
{
    /**
     * 任务最大尝试次数。
     * @var int
     */
    public $tries = 5;
    /**
     * 任务执行的最大秒数。
     * @var int
     */
    public $timeout = 30;
}

创作不易您的支持就是我最大的动力

  • 9
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值