队列

未匹配的标注
本文档最新版为 6.x,旧版本可能放弃维护,推荐阅读最新版!

队列

简介

Lumen 的队列服务为不同的队列后台提供了统一的 API 接口。队列允许你延迟处理耗时的任务,例如晚些时候再执行远程服务器上的任务,这能极大地提升应用程序对 web 请求的处理能力。

与框架的许多其他部分一样,Lumen 的队列作业功能与 Laravel 的队列作业功能相同。因此,要详细了解 Lumen 队列作业功能,请查看 完整的 Laravel 队列文档

配置

队列配置选项位于 .env 文件中。

.如果想完全定制队列配置,则必须将整个 vendor/laravel/lumen-framework/config/queue.php 文件复制到项目根目录下的 config 目录中,并根据需要调整必要的配置选项。如果 config 目录不存在,应先创建它。

驱动程序先决条件

数据库

要想使用 database 队列驱动程序,需要数据库表来保存要执行的作业和失败的作业:

Schema::create('jobs', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->string('queue');
    $table->longText('payload');
    $table->tinyInteger('attempts')->unsigned();
    $table->unsignedInteger('reserved_at')->nullable();
    $table->unsignedInteger('available_at');
    $table->unsignedInteger('created_at');
    $table->index(['queue', 'reserved_at']);
});

Schema::create('failed_jobs', function (Blueprint $table) {
    $table->increments('id');
    $table->text('connection');
    $table->text('queue');
    $table->longText('payload');
    $table->longText('exception');
    $table->timestamp('failed_at')->useCurrent();
});

Redis

要想使用 Redis 队列驱动程序,需要先用 Composer 安装 illuminate/redis (5.5.*) 扩展包。然后在 bootstrap/app.php 文件中注册 Illuminate\Redis\RedisServiceProvider

其它队列驱动程序的依赖包

下面列出其它队列驱动程序所需要的依赖扩展包:

  • Amazon SQS: aws/aws-sdk-php ~3.0
  • Beanstalkd: pda/pheanstalk ~3.0

与 Laravel 的差异

与框架的许多其他部分一样,Lumen 队列作业的功能与 Laravel 的队列作业功能相同。因此,要详细了解 Lumen 队列作业功能,请查看 完整的 Laravel 队列文档

不过呢,我们现在将讨论两个框架间的一些细微差异。首先,我们来谈谈 Lumen 中如何生成队列作业。

生成器

Lumen 不包括用于自动创建新 Job 类的生成器。因此你需要复制框架所带的 ExampleJob 类。这个类提供了每个 Job 类共享的基本结构。 ExampleJob 所继承的 Job 基类已包含所需的 InteractsWithQueueQueueableSerializesModels trait:

<?php

namespace App\Jobs;

class ExampleJob extends Job
{
    /**
     * 创建一个新的作业实例
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * 执行作业
     *
     * @return void
     */
    public function handle()
    {
        //
    }
}

调度作业

再次重申,你应该查阅完整的 Laravel 文档以获取有关调度队列作业的完整信息;和 Laravel 框架一样,你可以使用 dispatch 函数从 Lumen 应用程序中的任何位置调度作业:

dispatch(new ExampleJob);

当然,你也可以使用 Queue facade。如果你选择使用 facade,请务必在 bootstrap/app.php 文件中取消对 $app->withFacades() 调用的注释:

Queue::push(new ExampleJob);

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/lumen/5.5/queue...

译文地址:https://learnku.com/docs/lumen/5.5/queue...

上一篇 下一篇
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
贡献者:2
讨论数量: 0
发起讨论 只看当前版本


暂无话题~