使用 AWS SQS 配置 Laravel 队列
介绍
最近,我需要将一个项目中的队列驱动程序从 Redis 迁移到 SQS。不知为何,Laravel 官方队列文档提供的信息并不完善,而且我在网上也找不到相关的文章。因此,我写了这篇文章,希望大家不要浪费两个小时的周六上午时间去摸索那些本应在文档中说明的内容。我会尽量保持文章简洁,并附上一些其他文章的链接,以便专注于重点。
先决条件
- 一个现有的 Laravel 应用程序
- AWS账户
- 对 Laravel 队列的理解
- 一些AWS知识
第一步 - 安装 AWS 开发工具包
运行以下命令安装 SDK:
composer require aws/aws-sdk-php
第二步 - 获取您的 AWS 密钥
点击此链接观看指南。
当您需要设置权限时,请搜索AmazonSQSFullAccess并选择它。
如果您已有凭证,请修改其策略并执行相同的操作。
第三步 - 创建队列
前往您的 SQS 控制台,点击create queue。
Laravel 默认会将任务分派到default队列中,因此,你的第一个队列应该命名default为 SQS。
如果您要将请求分发到除 之外的其他队列
default,则队列名称应与您要分发到的队列名称相同。
其他设置保持默认,滚动到页面底部,然后点击按钮create queue。
第四步 - 设置.env变量
使用您喜欢的文本编辑器打开文件.env。按以下格式添加您的 AWS 密钥:
AWS_ACCESS_KEY_ID=YOUR_AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY=YOUR_SECRET_ACCESS_KEY
AWS_DEFAULT_REGION=YOUR_SQS_REGION
请确保替换YOUR_*为正确的凭据。接下来,设置您的 SQS 前缀:
SQS_PREFIX=https://sqs.<your-region>.amazonaws.com/<your-account-id>
我想我不需要解释这是什么<your-region>意思。
您可以登录<your-account-id>AWS 控制台,点击控制面板右上角的账户名称。
您会在旁边找到您的帐户 ID,My Account如上图所示。最后,将队列驱动程序更改为 SES。
QUEUE_CONNECTION=sqs
第五步 - 启动队列工作进程
运行以下命令启动队列工作进程:
php artisan queue:work sqs
将任务派发到默认队列,它应该会被处理。
Laravel Horizon 的修改
如果您使用 Laravel Horizon 管理队列,则需要对配置horizon.php文件进行一些修改。对于每个已定义的 worker,请将队列连接从redis默认值更改为其他值env('QUEUE_CONNECTION')。
由此:
<?php
...
'defaults' => [
'queue_name' => [
...
'connection' => 'redis',
],
...
]
...
对此:
<?php
...
'defaults' => [
'queue_name' => [
...
'connection' => env('QUEUE_CONNECTION'),
],
...
]
...
完成这些修改后,重启 Horizon,一切应该就没问题了。
结论
我没什么要补充的了,祝你们玩得开心,继续建设。
文章来源:https://dev.to/ichtrojan/configuring-laravel-queues-with-aws-sqs-3f0n


