【问题标题】:AccessDeniedError while trying connect to remote RabbitMQ server尝试连接到远程 RabbitMQ 服务器时出现 AccessDeniedError
【发布时间】:2018-03-25 00:19:18
【问题描述】:

我正在尝试使用 RabbitMQ 和 python pika 连接两个主机。

这里是工人:

#!/usr/bin/env python
import pika, time
NEW_TASK_HOST_IP = '192.168.0.2'
credentials = pika.PlainCredentials('login-to-remote', 'pass')
connection = pika.BlockingConnection(
                    pika.ConnectionParameters(host=NEW_TASK_HOST_IP))
channel = connection.channel()

channel.queue_declare(queue='task_queue', durable=True)
print(' [*] Waiting for messages. To exit press CTRL+C')

def callback(ch, method, properties, body):
    ch.basic_ack(delivery_tag = method.delivery_tag)

channel.basic_qos(prefetch_count=1)
channel.basic_consume(callback,
                      queue='task_queue')

这是新任务:

#!/usr/bin/env python
import pika, sys
WORKER_IP = '192.168.0.3'
credentials = pika.PlainCredentials('login-to-remote', 'pass')
connection = pika.BlockingConnection(pika.ConnectionParameters(
        host=WORKER_IP, socket_timeout=300, credentials=credentials))
channel = connection.channel()

channel.queue_declare(queue='task_queue', durable=True)

message = ' '.join(sys.argv[1:]) or "Hello World!"
channel.basic_publish(exchange='',
                      routing_key='task_queue',
                      body=message,
                      properties=pika.BasicProperties(
                         delivery_mode = 2, # make message persistent
                      ))
print(" [x] Sent %r" % message)
connection.close()

我已经使用命令在两台主机上创建了两个用户:

sudo rabbitmqctl add_user login-to-remote pass

当我尝试运行我所拥有的任何东西时:

Traceback (most recent call last):
  File "worker.py", line 5, in <module>
    connection = pika.BlockingConnection(pika.ConnectionParameters(host=NEW_TASK_HOST_IP, socket_timeout=300, credentials=credentials))
  File "/home/anna/.local/lib/python2.7/site-packages/pika/adapters/blocking_connection.py", line 374, in __init__
    self._process_io_for_connection_setup()
  File "/home/anna/.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 "/home/anna/.local/lib/python2.7/site-packages/pika/adapters/blocking_connection.py", line 466, in _flush_output
    raise maybe_exception
pika.exceptions.ProbableAccessDeniedError: (-1, "error(104, 'Connection reset by peer')")

我已经检查了主机与iperf 之间的双向 udp 和 tcp 连接:

iperf -s -p 5672
iperf -p 5672 -c 192.168.0.2

所以流量过去了。

我完全是堆栈,有什么问题?

【问题讨论】:

    标签: python rabbitmq rpc pika


    【解决方案1】:
    connection = pika.BlockingConnection(
                        pika.ConnectionParameters(host='new-task-host-ip'))
    
    .
    .
    .
    
    connection = pika.BlockingConnection(pika.ConnectionParameters(
        host='worker-ip', socket_timeout=300, credentials=credentials))
    

    'new-task-host-ip''worker-ip' 是无效的 IP 地址。您需要将这些替换为主机的实际 IP 地址(大概是 'localhost''127.0.0.1)。

    【讨论】:

    • 是的,这只是一个例子,当然有真实的 ip 而不是那些字符串,为了清楚起见,我将通过 IP 更改这个字符串
    • @Kirill 然后这个问题变成关于网络而不是编程。检查防火墙设置、端口转发(如果相关)等。
    • 我已经检查了与 iperf 的 RabbitMQ 端口的连接,一切都很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-16
    • 1970-01-01
    • 1970-01-01
    • 2018-10-07
    • 1970-01-01
    • 2019-05-26
    • 2016-01-22
    相关资源
    最近更新 更多