【laravel】队列的使用,开启延迟任务。


❤️ ,由于项目需要有一个延迟的任务要执行,于是就上了队列,比如指定时间段内邀请指定用户后,自动触发一个任务。

首先开启laravel的队列服务

config下的queue 修改

'default' => env('QUEUE_CONNECTION', 'database'),

因为我是用的数据库作为driver。

配置好默认的driver后,创建一个job

php artisan make:job InviteJob

这个时候会生成一个类

<?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 Illuminate\Support\Facades\Log;

/**
 * Class InviteChecker
 * @package App\Jobs
 * 检查用户是否24小时内完成任务
 */
class InviteChecker implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
    protected $user;
    public $tries = 2;
    public $timeout = 120;


    /**
     * Create a new job instance.
     *
     * @param User $user
     */
    public function __construct(User $user)
    {

        $this->user = $user;

    }

    /**
     * Execute the job.
     *
     * @return void
     * @throws \Exception
     */
    public function handle()
    {

        //检查用户24小时内邀请人数
//xxx
  
    }
}

这个类继承了ShouldQueue

我们要实现一个抽象方法:handle 这里执行任务就行了。

如何提交队列呢使用全局助手dispatch就好了

dispatch((new InviteChecker($user))->onConnection('database')->delay(now()->addSecond(10)));

提交了这个邀请任务检查的实例,并且指定了driver和延迟执行。可以看到参数是一个Eq模型。在任务构造器里可以获取这个参数。

启动任务

php artisan queue:work


文章作者: 2winter
文章链接: https://2winter.com
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 2winter !
  目录