3

目标是能够使用 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);
    ...
}
4

1 回答 1

-1

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

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

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

希望这对某人有用

于 2020-06-18T16:43:13.930 回答