介绍

Lumen队列服务提供了跨各种不同队列后端的统一API。队列使您可以将耗时的任务(例如在远程服务器上执行任务)的处理推迟到稍后的时间,这可以极大地加快对应用程序的Web请求。
与框架的许多其他部分一样,Lumen的排队作业的功能与Laravel的排队作业相同。因此,要了解有关在Lumen中排队作业的更多信息,请查看完整的Laravel队列文档

组态

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

驱动程序先决条件

数据库

为了使用database队列驱动程序,您将需要数据库表来保存作业和失败:

  1. Schema::create('jobs', function (Blueprint $table) {
  2. $table->bigIncrements('id');
  3. $table->string('queue');
  4. $table->longText('payload');
  5. $table->tinyInteger('attempts')->unsigned();
  6. $table->unsignedInteger('reserved_at')->nullable();
  7. $table->unsignedInteger('available_at');
  8. $table->unsignedInteger('created_at');
  9. $table->index(['queue', 'reserved_at']);
  10. });
  11. Schema::create('failed_jobs', function (Blueprint $table) {
  12. $table->increments('id');
  13. $table->text('connection');
  14. $table->text('queue');
  15. $table->longText('payload');
  16. $table->longText('exception');
  17. $table->timestamp('failed_at')->useCurrent();
  18. });

雷迪斯

为了使用Redis队列驱动程序,您将需要通过Composer 安装软件包。然后,您应该在文件中注册。illuminate/redis``Illuminate\Redis\RedisServiceProvider``bootstrap/app.php

其他队列依赖性

列出的队列驱动程序需要以下依赖项:

  • 亚马逊SQS: aws/aws-sdk-php ~3.0
  • 豆豆 pda/pheanstalk ~3.0

    与Laravel的区别

    与框架的许多其他部分一样,Lumen的排队作业的功能与Laravel的排队作业相同。因此,要了解有关在Lumen中排队作业的更多信息,请查看完整的Laravel队列文档
    但是,我们现在将讨论一些小的差异。首先,让我们谈谈Lumen中如何生成排队作业。

    发电机

    Lumen不包括用于自动创建新Job类的生成器。相反,您应该复制ExampleJob框架随附的类。此类提供每个Job类共享的基本结构。底座Job所使用的ExampleJob已包括所需要的InteractsWithQueueQueueableSerializesModels性状:
    1. <?php
    2. namespace App\Jobs;
    3. class ExampleJob extends Job
    4. {
    5. /**
    6. * Create a new job instance.
    7. *
    8. * @return void
    9. */
    10. public function __construct()
    11. {
    12. //
    13. }
    14. /**
    15. * Execute the job.
    16. *
    17. * @return void
    18. */
    19. public function handle()
    20. {
    21. //
    22. }
    23. }

    派遣工作

    同样,您应该查阅Laravel队列的完整文档,以获取有关调度队列作业的完整信息。但是,就像在Laravel框架中一样,您可以使用该dispatch函数从Lumen应用程序中的任何位置分派作业:
    1. dispatch(new ExampleJob);
    当然,您也可以使用Queue外墙。如果您选择使用外观,请确保在文件中取消对该调用的注释:$app->withFacades()``bootstrap/app.php
    1. Queue::push(new ExampleJob);