Php Swiftmailer和Symfony Messenger在docker中不与AMQP和rabbitmq一起工作
我迫不及待地要完成一项任务 我几乎什么都试过了,却找不到解决办法 我正在尝试使用SymMessenger、AMQP、rabbitmq和docker异步发送Swiftmailer邮件 一切都已安装,但在API平台内,我总是遇到无法处理的错误 其思想是在持久化MyEntity实体上触发u invoke函数。我尝试了mailcatcher,一切都正常,所以我尝试了异步示例 “试图从全局命名空间加载类“AMQPConnection”。\n是否忘记了“PhpAmqpLib\Connection\AMQPConnection”?,,,, 我从docker-compose.yml文件开始配置参数Php Swiftmailer和Symfony Messenger在docker中不与AMQP和rabbitmq一起工作,php,symfony,rabbitmq,amqp,swiftmailer,Php,Symfony,Rabbitmq,Amqp,Swiftmailer,我迫不及待地要完成一项任务 我几乎什么都试过了,却找不到解决办法 我正在尝试使用SymMessenger、AMQP、rabbitmq和docker异步发送Swiftmailer邮件 一切都已安装,但在API平台内,我总是遇到无法处理的错误 其思想是在持久化MyEntity实体上触发u invoke函数。我尝试了mailcatcher,一切都正常,所以我尝试了异步示例 “试图从全局命名空间加载类“AMQPConnection”。\n是否忘记了“PhpAmqpLib\Connection\AMQPC
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
我的.env文件
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 I类分派中:
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时:在我得到的docker容器中使用amqp:
我使用docker exec-ti rabbitmq_container命令运行容器
然后,当我在API平台中执行entity persist时,我从上面得到了消息。
激活数据持久化程序后,它将运行sendWelcomeEmail(),该程序具有dispatch方法,然后调用
我更改了SwiftMailer传输,但我认为这不是一个问题。此问题发生的原因是SwiftMailer流,它仅在内核::终止事件上发送消息,但此事件不会在工作进程上发生
要解决此问题,您应该:
调度事件::取消工具事件-
或者使用symfony/mailer
组件(symfony>=4.3)——
非常感谢您的回答。我有以下错误:套接字错误:无法连接到主机。我已尝试了所有操作,并且我的rabbitmq仪表板正在工作,因此我认为所有操作都正常工作。这可能是什么错误?@Vlad
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';
}
}