Php Swiftmailer和Symfony Messenger在docker中不与AMQP和rabbitmq一起工作

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

我迫不及待地要完成一项任务

我几乎什么都试过了,却找不到解决办法

我正在尝试使用SymMessenger、AMQP、rabbitmq和docker异步发送Swiftmailer邮件

一切都已安装,但在API平台内,我总是遇到无法处理的错误

其思想是在持久化MyEntity实体上触发u invoke函数。我尝试了mailcatcher,一切都正常,所以我尝试了异步示例

“试图从全局命名空间加载类“AMQPConnection”。\n是否忘记了“PhpAmqpLib\Connection\AMQPConnection”?,,,,

我从docker-compose.yml文件开始配置参数

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';
      }
    }