christoph-kluge/bref-sqs-laravel

基于 AWS Lambda 的 Laravel SQS 无服务器队列

2.0.0 2022-02-10 11:28 UTC

This package is auto-updated.

Last update: 2024-09-10 17:34:46 UTC


README

你有 Laravel 队列的缩放问题吗?安装、部署,无需烦恼!

由于采用了无服务器方法,扩展软件的各个部分变得非常容易。该项目添加了原生 Laravel 队列支持。

感谢 brefphp/brefserverless/serverless,它们在这里做了大部分工作。

支持的 bref 版本

支持的 Laravel 版本

安装

要通过 Composer 安装,请使用以下命令。它将自动检测最新版本并将其绑定到 ^。

composer require christoph-kluge/bref-sqs-laravel

此包将自动在您的 Laravel 应用程序中注册 ServiceProvider。

使用说明

  1. 配置您的应用程序以使用 SQS 队列(请参阅官方 Laravel 文档)
  2. 通过 composer 安装此包
  3. 将示例 artisan.php 添加到项目的根目录
  4. 使用 artisan.php 更新您的 serverless.yml 以使用新的处理器

示例 artisan.php

#!/opt/bin/php
<?php declare(strict_types=1);

$appRoot = getenv('LAMBDA_TASK_ROOT');
require_once $appRoot . '/vendor/autoload.php';
require_once $appRoot . '/bootstrap/app.php';

/** @var \Illuminate\Contracts\Console\Kernel $kernel */
$kernel = app(\Illuminate\Contracts\Console\Kernel::class);
$kernel->bootstrap();

$status = $kernel->handle(
    $input = new Symfony\Component\Console\Input\StringInput(getenv('ARTISAN_COMMAND')),
    new Symfony\Component\Console\Output\ConsoleOutput
);

$kernel->terminate($input, $status);

示例 serverless.yml

functions:
  queue:
    handler: artisan.php
    environment:
      ARTISAN_COMMAND: 'sqs:work sqs --tries=3 --sleep=1 --delay=1'
    layers:
      - ${bref:layer.php-81}
    events:
      - sqs:
          arn: arn:aws:sqs:region:XXXXXX:default-queue
          batchSize: 10

  another-queue:
    handler: artisan.php
    environment:
      ARTISAN_COMMAND: 'sqs:work sqs --queue=another-queue --tries=3 --sleep=1 --delay=1'
    layers:
      - ${bref:layer.php-81}
    events:
      - sqs:
          arn: arn:aws:sqs:region:XXXXXX:another-queue
          batchSize: 10

待办事项

  • 测试 FIFO 队列
  • 部分失败不应该“重新发送”新消息,而应该删除成功的消息,如果在批次大小中至少有一个作业失败,则抛出异常
  • (如果上述点能工作,则此点将过时)Dead-Letter-Queue 支持(通过读取 AWS 设置或自定义进行原生支持?)

参考资料 / 链接 / 看法

关于此主题的有用链接和看法