队列

队列

介绍

Lumen 队列服务跨各种不同的队列后端提供统一的 API。队列允许您将耗时任务(如在远程服务器上执行任务)的处理推迟到稍后的时间,这将大大加快对应用程序的 web 请求。

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

配置

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

如果要彻底自定义队列配置,则必须将整个 vendor/laravel/lumen framework/config/queue.php 文件复制到项目根目录中的 config 目录中,并根据需要调整必要的配置选项。如果 config 目录不存在,那么您应该创建它。

驱动程序先决条件

Database

为了使用 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 包。然后,您应该在 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 不包括自动创建新工作类的生成器。相反,您应该复制框架中包含的 ExampleJob 类。这个类提供每个作业类共享的基本结构。 ExampleJob 使用的基本 Job 已包含所需的 interacticsWithQueueQueueableSerializesModels 特征:

<?php

namespace App\Jobs;

class ExampleJob extends Job
{
    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Execute the job.
     *
     * @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 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
上一篇 下一篇
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
贡献者:2
讨论数量: 0
发起讨论 只看当前版本


暂无话题~