我正在尝试使用pika为rabbitmq编写python生产者和消费者代码。然而,对于我的特定情况,我需要在不同的主机上运行生产者,在其他主机上运行消费者。
我已经写了一个生产者代码:
import pika
credentials = pika.PlainCredentials('username', 'password')
parameters = pika.ConnectionParameters('ip add of another host', 5672, '/', credentials)
connection = pika.BlockingConnection()
channel = connection.channel()
channel.queue_declare(queue='test')
channel.basic_publish(exchange='', routing_key='test', body='hello all!')
print (" [x] sent 'Hello all!")
connection.close()
上面的生产者代码运行没有任何错误。我还创建了一个新用户,并在rabbitmq-server上为其提供了管理员凭据。然而,当我在另一个运行rabbitmq-server的主机上运行消费者代码时,我没有看到任何输出:
import pika
credentials = pika.PlainCredentials('username', 'password')
parameters = pika.ConnectionParameters('localhost', 5672, '/', credentials)
connection = pika.BlockingConnection()
channel = connection.channel()
channel.queue_declare(queue='test')
def callback(ch, method, properties, body):
print(" [x] Recieved %r" % body)
channel.basic_consume(
queue='test', on_message_callback=callback, auto_ack=True)
print (' [x] waiting for messages. To exit press ctrl+c')
channel.start_consume()
所以,在这里我有两个主机在同一个网络上安装了rabbitmq。然而,一个有3.7.10,另一个有3.7.16版本的rabbitmq。
生产者能够发送文本而不会出错,但另一台主机上的消费者没有收到任何文本。
当两者都在同一台机器上运行时,我不会遇到任何问题,因为我只是用localhost替换连接设置。由于默认情况下只允许用户guest连接到localhost,所以我在运行rabbitmq-server的消费者主机上创建了一个新用户。
2条答案
按热度按时间wlp8pajw1#
您似乎没有将
parameters
传递给BlockingConnection
示例。此外,您的消费者正在连接到
localhost
主机名。确保这实际上解决了,并且您的RabbitMQ服务正在侦听本地主机地址(127.0.0.1),它可能没有绑定到该地址。我相信RMQ会默认绑定到所有接口(以及所有地址),但我不确定。mwg9r5ms2#
您的消费者和生产者应用程序必须连接到相同的RabbitMQ服务器。如果你有两个RabbitMQ示例运行,它们是独立的。消息不会从RabbitMQ的一个示例移动到另一个示例,除非您配置了Shovel或Federation。