队列

更新时间: 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 中文文档 信息

深入理解计算机系统

深入理解计算机系统

Randal E.Bryant、David O'Hallaron / 龚奕利、雷迎春 / 中国电力出版社 / 2004-5-1 / 85.00元

从程序员的视角,看计算机系统! 本书适用于那些想要写出更快、更可靠程序的程序员。通过掌握程序是如何映射到系统上,以及程序是如何执行的,读者能够更好的理解程序的行为为什么是这样的,以及效率低下是如何造成的。粗略来看,计算机系统包括处理器和存储器硬件、编译器、操作系统和网络互连环境。而通过程序员的视角,读者可以清晰地明白学习计算机系统的内部工作原理会对他们今后作为计算机科学研究者和工程师的工作有......一起来看看 《深入理解计算机系统》 这本书的介绍吧!

HTML 压缩/解压工具

HTML 压缩/解压工具

在线压缩/解压 HTML 代码

在线进制转换器

在线进制转换器

各进制数互转换器

HEX CMYK 转换工具

HEX CMYK 转换工具

HEX CMYK 互转工具