0
点赞
收藏
分享

微信扫一扫

Laravel - Queue

自信的姐姐 2023-03-14 阅读 85

在处理耗时任务时,如果直接等待可能会影响整体的运行效率,故而使用队列,待执行完成之后再处理。

队列驱动

支持: 数据库、Redis、Amazon SQS、Beanstalkd

使用数据库

修改队列驱动:/.env 文件中

QUEUE_CONNECTION=database

创建队列数据表

php artisan queue:table
php artisan migrate


使用 Redis

在/config/database.php 中,配置 redis 服务

队列任务

生成任务

php artisan make:job  MyJob

文件如下

<?php
namespace App\Jobs;
use ...

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

protected $data;

public function __construct(Data $data){
$this->data = $data;
}

//实现该方法
public function handle(MyProcessor $processor){

}
}

唯一任务

<?php
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Contracts\Queue\ShouldBeUnique;

class UpdateSearchIndex implements ShouldQueue, ShouldBeUnique{
//超时释放唯一锁
public $uniqueFor = 3600;

//用来区分唯一性的内容
public function uniqueId(){
return $this->product->id;
}
}


任务调用

正常调用

MyJob::dispatch($data);
MyJob::dispatchIf($accountActive, $data);
MyJob::dispatchUnless($accountActive, $data);

设优先级

MyJob::dispatch((new Job)->onQueue('high'));

php artisan queue:work --queue=high,low
php artisan queue:work --queue=high,low

同步调用

MyJob::dispatchSync($podcast);

延迟调用

MyJob::dispatch($data)->delay(now()->addMinutes(10));

MyJob::dispatchAfterResponse(); //响应发回客户端时调用



举报

相关推荐

0 条评论