使用Symfony 4 Messenger,php-enqueue,AWS SQS,AWS SNS进行基本设置

时间:2019-03-15 00:16:10

标签: aws-sdk symfony4 enqueue

目标是能够使用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}&region=us-west-2
###< enqueue/enqueue-bundle ###

这是控制器中用于发送消息的代码:

public function index(MessageBusInterface $messageBus) {
    $message = new SmsMessage('This is so cool');
    $messageBus->dispatch($message);
    ...
}

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,设法解决了。

这是我与SQS一起使用的messenger.yaml配置

transports:
         sqs:
             dsn: enqueue://default?topic[name]=YOURTOPICNAME&queue[name]=YOURQUEUENAME&receiveTimeout=3

希望这对某人有用