fire-queue / amazon-sqs-job
此包用于添加所有必需的配置和代码,以便您可以通过 Amazon SQS 简单地使用和处理队列
Requires
- php: >=5.6.4
- laravel/framework: 7.* || 8.*
- shiftonelabs/laravel-sqs-fifo-queue: 2.0
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
运行上述命令将打印类似以下内容
从上述内容中,我们选择编号 9,对应于
FireQueue\AmazonSqsJob\AmazonSqsJobServiceProvider
这将本质上迁移并复制文件 SampleJob.php 到您项目的 App/Jobs 文件夹。因此,请确保 App/Jobs 文件夹已经存在,以便该文件可以从包成功移动到您的项目。
配置
-
将以下变量添加到您的 .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> -
将以下内容添加到您的 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
这将打印出与下面截图所示的所有工作进程日志
要终止或缩小工作进程,您必须运行以下命令
heroku ps:scale web=1 worker=0
这样,所有工作进程都将关闭,然后您可以通过运行旧的命令将工作进程的数量缩小到任何数量
heroku ps:scale web=1 worker=5
此外,请注意,当您更改 JOB 文件中的代码时,您需要再次遵循上述过程,因为工作进程缓存每个运行的 JOB 文件中的代码。因此,需要终止/销毁它们并部署新的工作进程,这样就可以获取新的代码文件版本。

