"Error reading data" 在 Symfony 中执行 RabbitMQ 消费者时
"Error reading data" while executing a RabbitMQ consumer in Symfony
我有一个 RabbitMQ 容器和一个带有 Symfony 3 的 PHP 7 容器。1.x 使用 OldSoundRabbitMqBundle.
执行 RabbitMQ 消费者的项目。
当运行这条执行test
消费者的命令时:
bin/console rabbitmq:consumer -w test
我收到以下错误:
[PhpAmqpLib\Exception\AMQPIOException]
Error reading data. Received 0 instead of expected 7 bytes
我的设置非常简单,我检查了以下内容:
- RabbitMQ 是最新版本 (3.6.5)
- 配置的
host
、vhost
、user
、password
参数正确
mbstring
扩展已启用
设置项目来重现问题真的很容易。
示例项目是 available on GitHub,README 文件中提供了说明,只需几个步骤即可重现问题。
以下是一些要点:
docker-compose.yml
version: '2'
services:
php:
build: ./docker/php/
links:
- rabbitmq
volumes:
- ./src:/var/www/rabbitmq-test
working_dir: /var/www/rabbitmq-test
rabbitmq:
image: rabbitmq:3.6-management
config.yml
old_sound_rabbit_mq:
connections:
default:
host: 'rabbitmq'
port: 5672
user: 'guest'
password: 'guest'
vhost: '/'
lazy: false
# ...
producers:
# ...
consumers:
test:
connection: default
exchange_options: {name: 'test', type: direct}
queue_options: {name: 'test'}
callback: test_consumer
test_consumer
服务是一个非常简单的 class 实现 ConsumerInterface
接口。
有人知道我的问题吗?
答案非常直截了当。我必须在我的 config.yml
:
中更改它
old_sound_rabbit_mq:
connections:
default:
# ...
use_socket: true
至:
old_sound_rabbit_mq:
connections:
default:
# ...
use_socket: false
请注意,false
是默认值。
我有一个 RabbitMQ 容器和一个带有 Symfony 3 的 PHP 7 容器。1.x 使用 OldSoundRabbitMqBundle.
执行 RabbitMQ 消费者的项目。当运行这条执行test
消费者的命令时:
bin/console rabbitmq:consumer -w test
我收到以下错误:
[PhpAmqpLib\Exception\AMQPIOException]
Error reading data. Received 0 instead of expected 7 bytes
我的设置非常简单,我检查了以下内容:
- RabbitMQ 是最新版本 (3.6.5)
- 配置的
host
、vhost
、user
、password
参数正确 mbstring
扩展已启用
设置项目来重现问题真的很容易。
示例项目是 available on GitHub,README 文件中提供了说明,只需几个步骤即可重现问题。
以下是一些要点:
docker-compose.yml
version: '2'
services:
php:
build: ./docker/php/
links:
- rabbitmq
volumes:
- ./src:/var/www/rabbitmq-test
working_dir: /var/www/rabbitmq-test
rabbitmq:
image: rabbitmq:3.6-management
config.yml
old_sound_rabbit_mq:
connections:
default:
host: 'rabbitmq'
port: 5672
user: 'guest'
password: 'guest'
vhost: '/'
lazy: false
# ...
producers:
# ...
consumers:
test:
connection: default
exchange_options: {name: 'test', type: direct}
queue_options: {name: 'test'}
callback: test_consumer
test_consumer
服务是一个非常简单的 class 实现 ConsumerInterface
接口。
有人知道我的问题吗?
答案非常直截了当。我必须在我的 config.yml
:
old_sound_rabbit_mq:
connections:
default:
# ...
use_socket: true
至:
old_sound_rabbit_mq:
connections:
default:
# ...
use_socket: false
请注意,false
是默认值。