Базовая настройка с использованием мессенджера Symfony 4, php-enqueue, AWS SQS, AWS SNS - PullRequest
2 голосов
/ 15 марта 2019

Цель состоит в том, чтобы иметь возможность отправлять сообщения, используя AWS SQS + SNS. Это было борьбой в течение нескольких дней, и я не знаю, как заставить это работать.

В Symfony 4.2 появился новый компонент - мессенджер, который я хотел использовать. Предполагается работать с php-enqueue в качестве стороннего транспорта. Я использую это для подключения к AWS SQS + SNS.

Я не могу найти документацию, которая бы собрала все это вместе. Я вижу, как php-enqueue подключается к AWS, но документы показывают конфигурацию в коде, а не в файлах config 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.*",

Это мой мессенджер. 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);
    ...
}
...