fire-queue/amazon-sqs-job

此包用于添加所有必需的配置和代码,以便您可以通过 Amazon SQS 简单地使用和处理队列

dev-master 2020-09-16 21:07 UTC

This package is auto-updated.

Last update: 2024-09-17 05:45:59 UTC


README

此包用于为部署在 Heroku 上的 Laravel 应用程序添加所有必需的配置和代码,以便通过 Amazon SQS 简单地使用和处理队列

安装

首先,在您的 composer.json 文件中将包包含在依赖项中


composer require fire-queue/amazon-sqs-job

运行以下命令将示例作业文件从包中移至您项目的 App/Jobs 文件夹


php artisan vendor:publish

运行上述命令将打印类似以下内容

Screenshot

从上述内容中,我们选择编号 9,对应于

FireQueue\AmazonSqsJob\AmazonSqsJobServiceProvider

这将本质上迁移并复制文件 SampleJob.php 到您项目的 App/Jobs 文件夹。因此,请确保 App/Jobs 文件夹已经存在,以便该文件可以从包成功移动到您的项目。

配置

  1. 将以下变量添加到您的 .env 文件中。这些都是 示例 键值,请根据您的配置更新它们

    QUEUE_CONNECTION=sqs-fifo
    SQS_KEY=AKIA21212wsxbuXEJ5RN71212342fvcds12433454657UU4CHSN6V1212
    SQS_SECRET=y34380laT23232323212121343430hHQYEsU9VyUF7Qkad8VXqzx-0SQkAdVcR8hK6
    SQS_QUEUE=IndexingVideo.fifo
    SQS_REGION=us-east-2
    SQS_PREFIX=https://sqs.us-east-2.amazonaws.com/<quie-id>
    
  2. 将以下内容添加到您的 app/queue.php 中的 connections 数组下

    'sqs-fifo' => [
    'driver' => 'sqs-fifo',
    'key' => env('AWS_ACCESS_KEY_ID'),
    'secret' => env('AWS_SECRET_ACCESS_KEY'),
    'prefix' => env('SQS_PREFIX', 'https://sqs.amazonaws.com/your-account-id'),
    'queue' => env('SQS_QUEUE', 'your-queue-name'),
    'suffix' => env('SQS_SUFFIX'),
    'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
    'group' => 'default',
    'deduplicator' => 'unique'
    ]
    

Heroku 工作进程设置

您需要在您的 Procfile 中包含以下工作进程

worker: php artisan queue:restart && php artisan queue:work --tries=3

这将在应用程序启动时重新启动并将队列投入使用。

Heroku 工作进程配置

要扩展 Heroku 并使用超过 1 个工作进程,您必须使用以下命令

heroku ps:scale web=1 worker=5

这样,将部署 1 个 Web Dyno 和 5 个 Worker Dynos。请注意,如果您正在使用 Free 或 hobby tier 在 Heroku 上运行此命令,将会出现以下错误

不能将进程类型更新到超过 1 个 Free size dynos。

因此,您必须升级到上述免费和 hobby tier。

您可以使用以下命令查看工作进程日志

heroku logs --tail --ps worker

这将打印出与下面截图所示的所有工作进程日志

enter image description here

要终止或缩小工作进程,您必须运行以下命令

heroku ps:scale web=1 worker=0

这样,所有工作进程都将关闭,然后您可以通过运行旧的命令将工作进程的数量缩小到任何数量

heroku ps:scale web=1 worker=5

此外,请注意,当您更改 JOB 文件中的代码时,您需要再次遵循上述过程,因为工作进程缓存每个运行的 JOB 文件中的代码。因此,需要终止/销毁它们并部署新的工作进程,这样就可以获取新的代码文件版本。