Цель состоит в том, чтобы иметь возможность отправлять сообщения, используя 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}®ion=us-west-2
###< enqueue/enqueue-bundle ###
Это код в контроллере для отправки сообщения:
public function index(MessageBusInterface $messageBus) {
$message = new SmsMessage('This is so cool');
$messageBus->dispatch($message);
...
}