我有一个运行python脚本的docker容器。该脚本提供了一个AMQP url,Pika将其用作阻塞连接的pika.URLParameters。当我在我的计算机上运行脚本时,它工作正常。因为我已经停靠了它并且监视容器的日志,我看到在尝试连接时脚本会发出声音。这是我在脚本中使用的代码:
AMQP_URL = __prefix__ + __username__ + ":" + __password__ + __virtual__host + session
("The programm hangs here")
connection = pika.BlockingConnection(pika.URLParameters(AMQP_URL))
channel = connection.channel()
channel.exchange_declare(
exchange = "tmp.topic_2",
exchange_type = "topic"
)
result = channel.queue_declare(exclusive = True)
queue_name = result.method.queue
channel.queue_bind(
exchange = "amq.topic",
queue = queue_name,
routing_key = "ui.#"
)
channel.basic_consume(
UiCallback,
queue= queue_name,
no_ack=True
)
channel.start_consuming()
我已将pika包含在要求中。我想知道问题是什么: 也许容器无法访问网络?也许我需要在这个或另一个容器中设置一个rabbitmq服务器? 谢谢你的帮助
答案 0 :(得分:0)
您需要将环境变量RABBIT_HOST_IP设置为运行Docker容器的“主机”的IP。
我的理解是,阻塞连接将值发送回调用它的机器,这可以正常工作,但是如果您在容器内,则发送回的消息将发送到无法在机器上访问的docker容器的IP。 / p>