laravel 队列 延时队列-Redis

直接上代码了

<?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 Mockery\Exception;

# php artisan  queue:work  --queue='队列名称,队列名称2'; 按照顺序处理 开启
# 调起这个控制器 数据处理完成 传给指定队列【前提 队列已经开启】
# 队列进行数据的处理【如 判断订单是否满足过期时间 未支付,未支付撤销订单 返回库存数量】
# 若队列有问提  在队列的异常中处理 是否再次进入队列处理 还是...


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

    private $data;
    private $tres;  # 最大尝试次数
    private $timeout;   # 最大超时时间

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct($data)
    {
        //

        $this->data = $data;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        //  这里没啥事。就是你的业务逻辑 
 
    echo 123;
} /** * 失败处理 存表 单独设置定时任务 重新跑 * @param Exception $exception */ public function failed(Exception $exception) { echo 222; var_dump($exception->getMessage()); # 打印错误信息 } }

 

 

 

重点是控制器这里 ;

<?php

namespace App\Http\Controllers\task;

use App\Jobs\task;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class taskController extends Controller
{
    //模拟下单
    public function task()
    {
        $data = [
            'tid'   => date('m-d H:i:s').uniqid(),
            'name'  => 'ethan',
            'address'  => 'ethan'
        ];

       $jobs = new task($data);
       # 把任务放到队列中
        $jobs->dispatch($jobs)->onQueue('task')->delay(5);

        # ->onQueue()->delay()
        # onQueue 放入指定队列中去,如果不加 则redis 会放到默认队列中。
        # delay 延迟的意思。可以实现定时任务 单位秒
        # addMinutes(10)); 延迟的时间 单位分钟  延迟队列可以做订单下单 多久未支付 自动取消订单 恢复库存的动作

        # 以上为 存redis 队列成功

        # 最后执行 php artisan  queu e:work  --queue='队列名称';
        return 'ok!';
    }
}

 我这里执行没有任何问题 因为是前俩天做的 就不贴结果了。

posted @ 2021-09-16 11:08  现世中的素人  阅读(500)  评论(0编辑  收藏  举报