❤️ ,由于项目需要有一个延迟的任务要执行,于是就上了队列,比如指定时间段内邀请指定用户后,自动触发一个任务。
首先开启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 implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; protected $user; public $tries = 2; public $timeout = 120;
public function __construct(User $user) {
$this->user = $user;
}
public function handle() {
} }
|
这个类继承了ShouldQueue
我们要实现一个抽象方法:handle 这里执行任务就行了。
如何提交队列呢使用全局助手dispatch就好了
1
| dispatch((new InviteChecker($user))->onConnection('database')->delay(now()->addSecond(10)));
|
提交了这个邀请任务检查的实例,并且指定了driver和延迟执行。可以看到参数是一个Eq模型。在任务构造器里可以获取这个参数。
启动任务
php artisan queue:work