Я отчаянно справляюсь с задачей.
Я пробовал все, но не могу найти решения.
Я пытаюсь отправлять почту с помощью Swiftmailer асинхронно, используя SymMessenger, AMQP, rabbitmq с docker.
Все установлено, но на платформе API я всегда получаю ошибку, которую не мог обработать.
Идея состоит в том, чтобы запустить функцию __invoke при сохранении объекта MyEntity. Я пробовал использовать mailcatcher, все работает, поэтому я пробовал использовать примеры asyn c.
"Попытка загрузить класс" AMQPConnection "из глобального пространства имен. \ NВы забыли" использовать "выражение для" PhpAmqpLib \ Connection \ AMQPConnection "?", ",
Я настроил параметры, начиная с docker -compose.yml file
version: '3'
services:
rabbitmq: # The RabbitMQ container.
container_name: rabbitmq_container
build:
context: .
dockerfile: scripts/provision/docker/rabbitmq/Dockerfile
volumes:
- ./scripts/provision/docker/mysql/data:/var/lib/mysql:cached
ports: [5672, 15672]
container_php:
container_name: container_php
build: ./scripts/provision/docker/php-fpm/
expose:
- 9000
volumes:
- .:/var/www/html:cached
environment:
- MESSENGER_TRANSPORT_DSN=amqp://guest:guest@rabbitmq:5672/%2f/messages
My .env файл
MESSENGER_TRANSPORT_DSN=amqp://guest:guest@127.0.0.1:5672/%2f/messages
файл messenger.yml
framework:
messenger:
transports:
# Uncomment the following line to enable a transport named "amqp"
amqp_: '%env(MESSENGER_TRANSPORT_DSN)%'
routing:
# Route your messages to the transports
'App\Entity\MyEntity': amqp
В отправке класса DataPersister:
private function sendWelcomeEmail(MyEntity $myEntity, MessageBus $messageBus)
{
$messageBus->dispatch($myEntity);
}
И моя функция в EmailNotificationHandler.
public function __invoke(MyEntity $myEntity) :JsonResponse
{
$message = (new \Swift_Message(
'New comment on post'
))
->setFrom('sender@sent.com')
->setTo('recipient@recipient.com')
->setBody(
'There is a new comment on post, check it out!',
'text/html',
'UTF-8'
)
;
$mailer->send($message);
sleep(5);
echo 'OK';
}
}
Когда я запускаю следующую команду php bin / console messenger: потребляйте amqp в контейнере docker, я получаю:
Я запускаю контейнер с помощью команды docker exe c -ti rabbitmq_container .
А затем, когда я выполняю сохранение сущности на платформе API, я получил сообщение сверху. хранитель данных активирован, он запускает sendWelcomeEmail (), у которого есть метод отправки, а затем __invoke.
Я сменил транспорт SwiftMailer, но думаю, что это не проблема.