❤️ ,由于项目需要有一个延迟的任务要执行,于是就上了队列,比如指定时间段内邀请指定用户后,自动触发一个任务。
首先开启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