无法让远程用户通过 RabbitMQ 成功进行身份验证

Failed to get a remote user to authenticate successfully with RabbitMQ

我在 Ubuntu 14.04 上安装了 RabbitMQ 3.6.9,我想用 pika 制作一个基本的生产者-消费者示例,但与 RabbitMQ 网站上的教程不同,我希望消费者能够在另一台机器上。

我知道我可以将 [{rabbit, [{loopback_users, []}]}]. 添加到 rabbitmq.config 并避免所有身份验证问题,但我想在我的示例中包括连接的身份验证方面。

我首先添加了一个新用户:rabbitmqctl add_user user password,然后我 运行 下面的脚本:

import pika

url = '10.0.0.1'

credentials = pika.PlainCredentials('user', 'password')
parameters = pika.ConnectionParameters(host=url, credentials=credentials)
connection = pika.BlockingConnection(parameters)
connection.close()
print 'Made it through!'

但是,我得到以下异常:

Traceback (most recent call last):
  File "test.py", line 8, in <module>
    connection = pika.BlockingConnection(parameters)
  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 410, in _flush_output
    self._impl.ioloop.poll()
  File "/usr/local/lib/python2.7/dist-packages/pika/adapters/select_connection.py", line 602, in poll
    self._process_fd_events(fd_event_map, write_only)
  File "/usr/local/lib/python2.7/dist-packages/pika/adapters/select_connection.py", line 443, in _process_fd_events
    handler(fileno, events, write_only=write_only)
  File "/usr/local/lib/python2.7/dist-packages/pika/adapters/base_connection.py", line 364, in _handle_events
    self._handle_read()
  File "/usr/local/lib/python2.7/dist-packages/pika/adapters/base_connection.py", line 407, in _handle_read
    return self._handle_error(error)
  File "/usr/local/lib/python2.7/dist-packages/pika/adapters/base_connection.py", line 338, in _handle_error
    self._handle_disconnect()
  File "/usr/local/lib/python2.7/dist-packages/pika/adapters/base_connection.py", line 288, in _handle_disconnect
    self._adapter_disconnect()
  File "/usr/local/lib/python2.7/dist-packages/pika/adapters/select_connection.py", line 95, in _adapter_disconnect
    super(SelectConnection, self)._adapter_disconnect()
  File "/usr/local/lib/python2.7/dist-packages/pika/adapters/base_connection.py", line 154, in _adapter_disconnect
    self._check_state_on_disconnect()
  File "/usr/local/lib/python2.7/dist-packages/pika/adapters/base_connection.py", line 178, in _check_state_on_disconnect
    raise exceptions.ProbableAccessDeniedError
pika.exceptions.ProbableAccessDeniedError

根据 pika 的来源,这意味着:"Client was disconnected at a connection stage indicating a probable denial of access to the specified virtual host",所以我想也许我应该添加一个 vhost 而不是使用默认的,所以我 运行 rabbitmqctl add_vhost testvhost,重新启动了服务器,以及 运行 以下脚本:

import pika

url = '10.0.0.1'
vhost = 'testhvost'

credentials = pika.PlainCredentials('user', 'password')
parameters = pika.ConnectionParameters(host=url, virtual_host=vhost, credentials=credentials)
connection = pika.BlockingConnection(parameters)
connection.close()
print 'Made it through!'

但是我仍然遇到同样的异常。

我错过了什么?是否需要任何基本的 rabbitmq.config 文件才能让它工作?服务器是全新安装,因此目前没有加载配置文件。

您是否为该用户添加了访问虚拟主机的权限?

到默认虚拟主机:

rabbitmqctl set_permissions user ".*" ".*" ".*"

还有你新创建的:

rabbitmqctl set_permissions -p /testhvost user ".*" ".*" ".*"