gpt4 book ai didi

docker - pika.exceptions.ConnectionClosed:与172.18.0.3:5672的连接失败:[Errno 111]连接被拒绝

转载 作者:行者123 更新时间:2023-12-02 19:08:06 26 4
gpt4 key购买 nike

我正在尝试将Pika客户端与RabbitMQ服务器连接。它们都位于不同的docker镜像上,并且它们位于相同的docker网络上。
我将网络设置为

docker network create my_first_net

我正在运行RabbitMQ图像 rabbitmq作为
docker run -d --network my_first_net --hostname rabbitmqhost  -p 35672:15672 -p 45672:5672 rabbitmq

我正在将Pika图像 ms2-1运行为
docker run --network my_first_net --hostname rabbitmq ms2-1

这是pika-client ms2.py的代码:
import pika

exchange = 'gateway_exchange'

myName = 'microservice2'

myKey = '#.ms2.#'
gwKey = 'gw'

credentials = pika.PlainCredentials('guest', 'guest')
parameters = pika.ConnectionParameters('rabbitmq', 5672, '/', credentials)

def send(key, message):
send_conn = pika.BlockingConnection(parameters)
send_ch = send_conn.channel()

send_ch.exchange_declare(exchange=exchange,
exchange_type='topic')

send_ch.basic_publish(exchange=exchange,
routing_key=key,
body=message)
print(" [x] Sent %r:%r" % (key, message))
send_conn.close()

def receive():
connection = pika.BlockingConnection(parameters)
channel = connection.channel()
channel.exchange_declare(exchange=exchange,
exchange_type='topic')

result = channel.queue_declare(exclusive=True)
queue_name = result.method.queue

binding_key = myKey
channel.queue_bind(exchange=exchange,
queue=queue_name,
routing_key=binding_key)

print(' [*] Waiting for messages. To exit press CTRL+C')

def callback(ch, method, properties, body):
print(" [x] Received %r:%r" % (method.routing_key, body))
send('Response-from-' + myName + '-to-.' + gwKey, body)

channel.basic_consume(callback,
queue=queue_name,
no_ack=True)
channel.start_consuming()

if __name__ == "__main__":
receive()

尝试运行pika图像时出现以下错误
  Traceback (most recent call last):
File "ms2.py", line 61, in <module>
receive()
File "ms2.py", line 36, in receive
connection = pika.BlockingConnection(parameters)
File "/usr/local/lib/python2.7/dist-packages/pika/adapters/blocking_connection.py", line 374, in __init__
self._process_io_for_connection_setup()
File "/usr/local/lib/python2.7/dist-packages/pika/adapters/blocking_connection.py", line 414, in _process_io_for_connection_setup
self._open_error_result.is_ready)
File "/usr/local/lib/python2.7/dist-packages/pika/adapters/blocking_connection.py", line 468, in _flush_output
raise exceptions.ConnectionClosed(maybe_exception)
pika.exceptions.ConnectionClosed: Connection to 172.18.0.3:5672 failed: [Errno 111] Connection refused

当我执行 172.18.0.2时,RabbitMQ容器的ip地址是 docker inspect,当我在容器内执行 68.50.13.82时,它是 curl ifconfig.me
我确认容器正在使用`netstat -ap tcp |监听端口5672。 grep -i“听”

我认为Errno 111与身份验证错误有关,但是我无法从我的计算机连接到任一IP地址。

解决该问题的下一步应该是什么?

编辑:我意识到我在运行RabbitMQ服务器时没有添加 --name标志,所以我删除了该容器并以以下方式启动了一个新容器:
docker run -d --network my_first_net --hostname rabbitmqhost --name rabbitmq -p 15672:15672 -p 5672:5672 rabbitmq

但是现在我得到了错误:
Traceback (most recent call last):
File "ms2.py", line 61, in <module>
receive()
File "ms2.py", line 36, in receive
connection = pika.BlockingConnection(parameters)
File "/usr/local/lib/python2.7/site-packages/pika/adapters/blocking_connection.py", line 374, in __init__
self._process_io_for_connection_setup()
File "/usr/local/lib/python2.7/site-packages/pika/adapters/blocking_connection.py", line 414, in _process_io_for_connection_setup
self._open_error_result.is_ready)
File "/usr/local/lib/python2.7/site-packages/pika/adapters/blocking_connection.py", line 466, in _flush_output
raise maybe_exception
socket.gaierror: [Errno 8] nodename nor servname provided, or not known

最佳答案

发生问题是因为您在运行pika容器时正在重复使用相同的主机名

docker run --network my_first_net --hostname rabbitmq ms2-1

您不应将主机名设置为Rabbitmq容器名。我执行了相同的步骤,并且能够连接

关于docker - pika.exceptions.ConnectionClosed:与172.18.0.3:5672的连接失败:[Errno 111]连接被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46219760/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com