如果能解决以下问题,我将不胜感激。
我已经将Symfony Messenger设置为使用AMQP和RabbitMQ。我可以在项目中调度消息并使用AMQPConnection。
但是当我尝试使用该消息时,我得到了以下提示:
$ php bin/console messenger:consume-messages amqp Attempted to load class "AMQPConnection" from the global namespace. Did you forget a "use" statement for "PhpAmqpLib\Connection\AMQPConnection"?
控制台命令调用AmqpFactory.php
内的方法
public function createConnection(array $credentials): \AMQPConnection { return new \AMQPConnection($credentials); }
因此,当我从浏览器运行项目时,一切正常。我可以使用AMQPConnection等。但是从终端运行时,找不到AMQPConnection类。
在我的composer.json中,我还安装了amqplib
"php-amqplib/php-amqplib": "^2.7",
我使用Docker,并且Dockerfile包含:
FROM php:7-apache RUN usermod -u 1000 www-data &&\ a2dissite 000-default &&\ apt-get update &&\ apt-get install -y \ zlib1g-dev \ libicu-dev \ g++ \ libfreetype6-dev \ libssh-dev \ libjpeg62-turbo-dev \ libmcrypt-dev \ librabbitmq-dev \ libpng-dev &&\ docker-php-ext-configure intl &&\ docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ &&\ docker-php-ext-install -j$(nproc) gd pdo_mysql intl opcache zip pcntl exif bcmath sockets &&\ a2enmod rewrite RUN pecl install amqp \ && docker-php-ext-enable amqp COPY docker/apache2.conf /etc/apache2/apache2.conf WORKDIR /var/www/project
更新! 我已经打印了phpinfo(),在分发消息时,我的版本是7.2.8,在执行终端命令时,我的版本是7.2.7。因此,终端在执行命令时未使用PHP的Docker实例。
答案 0 :(得分:2)
使用Docker时,需要在所需的容器内执行Symfony命令。
问题来自尝试从本地主机执行php:
$ php bin/console messenger:consume-messages amqp
本地主机没有具有必要的依赖性,在这种情况下为RabbitMQ
。
相反,应使用正确的容器运行命令:
$ docker exec -ti container_name sh -c "cd /var/www/project/ && php bin/console messenger:consume-messages amqp"
container_name
是具有RabbitMQ
依赖项的容器的名称。
答案 1 :(得分:0)
终于解决了这个问题。我不知道我必须通过Docker来运行此命令。这适用于med:
docker exec -ti container_name sh -c "cd /var/www/project/ && php bin/console messenger:consume-messages amqp"
答案 2 :(得分:0)
您在Docker容器中缺少软件包librabbitmq4
。将RUN apt-get update --fix-missing && apt-get update && apt-get install php-amqp
添加到您的Dockerfile并重建映像。