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

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

首先开启laravel的队列服务

config下的queue 修改

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

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

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

php artisan make:job InviteJob

这个时候会生成一个类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?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就好了

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

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

启动任务

php artisan queue:work