使用RabbitMQ从一台PC向另一台PC发送消息

时间:2017-08-04 03:41:46

标签: python rabbitmq

我有三台PC,其中两台PC是生产商,一台是消费者。使用Python,我如何让它们相互通信。我能够在localhost上做同样的事情,我按照RabbitMQ网站上的教程进行操作。他们在那里提到我所要做的就是添加IP地址而不是localhost,但这并不起作用。请帮忙。

修改

我对我的代码进行了以下更改,以使用pika验证用户名和密码。我仍然遇到错误

receive.py的代码如下:

import pika

credentials = pika.PlainCredentials('sneha', 'sneha')
connection = pika.BlockingConnection(pika.ConnectionParameters('rabbit@sneha-System-Product-Name', 5672, '/', credentials))
channel = connection.channel()

channel.queue_declare(queue='hello')

def callback(ch, method, properties, body):
    print(" [x] Received %r" % body)

channel.basic_consume(callback,
                      queue='hello',
                      no_ack=True)

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

我收到以下错误:

    Traceback (most recent call last):
  File "receive.py", line 4, in <module>
    connection = pika.BlockingConnection(pika.ConnectionParameters('rabbit@sneha-System-Product-Name', 5672, '/', credentials))
  File "/usr/local/lib/python2.7/dist-packages/pika/adapters/blocking_connection.py", line 339, in __init__
    self._process_io_for_connection_setup()
  File "/usr/local/lib/python2.7/dist-packages/pika/adapters/blocking_connection.py", line 374, 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 395, in _flush_output
    raise exceptions.ConnectionClosed()
pika.exceptions.ConnectionClosed

1 个答案:

答案 0 :(得分:0)

教程使用guest RabbitMQ用户帐户,该帐户在全新安装时自动创建并具有所有权限。但是,this account is restricted to connections from localhost only是故意的:因为它具有无限的权限,所以默认安装会引起安全问题。这个帐户适合玩RabbitMQ但不适合生产使用。

因此,在远程计算机上使用RabbitMQ时,它会拒绝与guest帐户的连接,并且您会收到ProbableAuthenticationError错误。

现在,您有两个解决方案:

  1. 建议的是创建另一个用户,为其提供适当的权限并将其用于您的应用程序。这在Access Control documentation

  2. 中有所描述
  3. 禁用guest帐户中的“仅限本地主机”保护。为此,您需要使用以下RabbitMQ配置:

    [
      {rabbit, [
          {loopback_users, []}
        ]}
    ].
    

    请阅读documentation of loopback_users(您必须在此页面中搜索loopback_users)。