Laravel - Queue
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel - Queue相关的知识,希望对你有一定的参考价值。
在处理耗时任务时,如果直接等待可能会影响整体的运行效率,故而使用队列,待执行完成之后再处理。
队列驱动
支持: 数据库、Redis、Amazon SQS、Beanstalkd
修改队列驱动:/.env 文件中
QUEUE_CONNECTION=database
创建队列数据表
php artisan queue:table
php artisan migrate
在/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 Eloquent 关系有很多错误:在 where 上使用时调用未定义的方法
在更新到Laravel 5.3后播种时调用未定义的方法Illuminate Database Query Builder :: lists()