Laravel - Queue

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel - Queue相关的知识,希望对你有一定的参考价值。

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


队列驱动

支持: 数据库、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(); //响应发回客户端时调用



以上是关于Laravel - Queue的主要内容,如果未能解决你的问题,请参考以下文章

使用 XAMPP apache 服务器 Laravel 8 时调用路由时出错

更新到 Laravel 5.3 后播种时调用未定义的方法 Illuminate\Database\Query\Builder::lists()

Laravel Queue Worker 内存占用太大:/

Laravel Eloquent 关系有很多错误:在 where 上使用时调用未定义的方法

在更新到Laravel 5.3后播种时调用未定义的方法Illuminate Database Query Builder :: lists()

jQuery源代码解析—— ready载入queue队列