【发布时间】:2021-06-08 16:17:57
【问题描述】:
我们确实尝试了很多,但仍然无法让 Symfony RabbitMQ 包 (https://github.com/php-amqplib/RabbitMqBundle) 在 AWS(使用 Docker)中运行。 AWS 只允许在 AWS 托管服务中打开 AMQPS 和 5671 端口。
这是我们当前的详细配置:
old_sound_rabbit_mq:
connections:
default:
# nevermind
secure:
url: 'amqps://%env(RABBITMQ_USER)%:%env(RABBITMQ_PASSWORD)%@%env(RABBITMQ_HOST)%:%env(RABBITMQ_PORT)%'
vhost: '%env(RABBITMQ_VHOST)%'
lazy: true
connection_timeout: 6
read_write_timeout: 6
ssl_context:
verify_peer: false
keepalive: true
heartbeat: 60
use_socket: true # default false
producers:
# use 'old_sound_rabbit_mq.[my-producer-name]_producer' service to send data.
article_create:
connection: secure
exchange_options: { name: pimcore.article.create, type: topic }
queue_options:
name: article_create
请注意,我们使用“url”配置值,因为它似乎是为包设置 AMQPS 的唯一方法。
docker-compose.yml的相关部分:
php-fpm:
container_name: php-fpm
environment:
- RABBITMQ_HOST=my-rabbitmq # usually the docker container (otherwise localhost or server address)
- RABBITMQ_PORT=5671 # locally it seems to work with 5672
- RABBITMQ_USER=user
- RABBITMQ_PASSWORD=password
- RABBITMQ_VHOST=/
rabbitmq:
container_name: my-rabbitmq
image: rabbitmq:3.8-management
ports:
- 127.0.0.1:15672:15672
- 127.0.0.1:5672:5672
- 127.0.0.1:5671:5671
environment:
- RABBITMQ_DEFAULT_USER=pimcore
- RABBITMQ_DEFAULT_PASS=pimcore
volumes:
- rabbitmq:/var/lib/rabbitmq
这是从 Symfony 事件监听器发送消息的方式:
$this->appKernel->getContainer()->get('old_sound_rabbit_mq.article_create_producer')->publish(
serialize($objToSend),
"article_create",
[
'delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT,
'message_id' => md5(uniqid("prefix", true))
]
);
这一切似乎都在本地工作,没有任何问题。在 AWS 中,我们收到以下错误:
没有套接字:
Broken pipe or closed connection
带套接字:
[2021-06-08 15:59:45] request.CRITICAL: Uncaught PHP Exception ErrorException: "Warning: socket_recv(): unable to read from socket [104]: Connection reset by peer" at /var/www/vendor/php-amqplib/php-amqplib/PhpAmqpLib/Wire/IO/SocketIO.php line 121 {"exception":"[object] (ErrorException(code: 0): Warning: socket_recv(): unable to read from socket [104]: Connection reset by peer at /var/www/vendor/php-amqplib/php-amqplib/PhpAmqpLib/Wire/IO/SocketIO.php:121)"} []
【问题讨论】:
标签: php amazon-web-services docker symfony rabbitmq