目标是能够使用AWS SQS + SNS发送消息。这已经是几天的挣扎,我不知道如何使它起作用。
Symfony 4.2有一个新组件,我想使用的Messenger。它应该与php-enqueue一起用作第三方传输。我正在使用它来连接到AWS SQS + SNS。
我找不到任何将它们整合在一起的文档。我看到php-enqueue如何连接到AWS,但是文档在代码中而不是在yaml或.env文件中显示了配置。这是一个问题,因为我希望Messenger / enqueue处理幕后工作。
我能够使Symfony Messenger无需使用php-enqueue即可进行本地同步消息工作。但是之后……显然我做错了。我希望有人可能对此配置有样板。
我在这里。我只是想使用SQS发送消息。我遇到错误:
Error executing "GetQueueUrl" on "https://sqs.us-west-2.amazonaws.com";
AWS HTTP error: Client error: `POST https://sqs.us-west-2.amazonaws.com`
resulted in a `400 Bad Request`
我尝试了enqueue.yaml文件中许多键的排列,但没有正确完成。我用它来寻求帮助,但无法正常工作。 https://enqueue.readthedocs.io/en/stable/bundle/config_reference/
->>编辑:我发现您可以将主题和队列名称添加到DSN。我不再收到错误并创建了一个主题,但没有。现在,消息总线正在运行,但是在本地同步。没有消息发送到AWS。
这些是我安装的Composer库。我肯定有太多东西了,但是我一直在努力使它起作用。
"aws/aws-sdk-php": "^3.19",
"enqueue/amqp-lib": "^0.9.8",
"enqueue/enqueue-bundle": "^0.9.8",
"enqueue/messenger-adapter": "^0.2.2",
"enqueue/snsqs": "^0.9.0",
"guzzlehttp/guzzle": "^6.0",
"symfony/amqp-pack": "^1.0",
"symfony/messenger": "4.2.*",
这是我的messenger.yaml
framework:
messenger:
transports:
amqp: 'enqueue://default?topic[name]=testQ&queue[name]=testQ'
routing:
# Route your messages to the transports
'App\Message\SmsMessage': amqp
这是enqueue.yaml
enqueue:
default:
transport:
dsn: '%env(resolve:ENQUEUE_DSN)%'
client:~
这是.env中的条目
###> enqueue/enqueue-bundle ###
ENQUEUE_DSN=snsqs::?key={key}&secret={secret}®ion=us-west-2
###< enqueue/enqueue-bundle ###
这是控制器中用于发送消息的代码:
public function index(MessageBusInterface $messageBus) {
$message = new SmsMessage('This is so cool');
$messageBus->dispatch($message);
...
}
答案 0 :(得分:0)
我遇到了同样的问题,设法解决了。
这是我与SQS一起使用的messenger.yaml配置
transports:
sqs:
dsn: enqueue://default?topic[name]=YOURTOPICNAME&queue[name]=YOURQUEUENAME&receiveTimeout=3
希望这对某人有用