队列

更新时间: 2019-08-01 16:47

简介

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 (5.7.*) 扩展包。然后在 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);

查看更多 Laravel 中文文档 信息

Beginning XML with DOM and Ajax

Beginning XML with DOM and Ajax

Sas Jacobs / Apress / 2006-06-05 / USD 39.99

Don't waste time on 1,000-page tomes full of syntax; this book is all you need to get ahead in XML development. Renowned web developer Sas Jacobs presents an essential guide to XML. Beginning XML with......一起来看看 《Beginning XML with DOM and Ajax》 这本书的介绍吧!

JSON 在线解析

JSON 在线解析

在线 JSON 格式化工具

Base64 编码/解码

Base64 编码/解码

Base64 编码/解码