简体   繁体   English

Rabbitmq hello world 连接仅适用于本地主机(python)

[英]Rabbitmq hello world connection only works on localhost (python)

I have this simple code taken from the rabbitmq tutorial ( http://www.rabbitmq.com/tutorials/tutorial-one-python.html )我有这个来自rabbitmq教程的简单代码( http://www.rabbitmq.com/tutorials/tutorial-one-python.html

import pika
import logging

logging.basicConfig()

connection = pika.BlockingConnection(pika.ConnectionParameters(
       host='localhost'))

channel = connection.channel()

channel.queue_declare(queue='hello')

print ' [*] Waiting for messages. To exit press CTRL+C'

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

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

channel.start_consuming()

It works but if I change localhost with the ip of my computer from my own computer or a computer in the same network:它可以工作,但是如果我从我自己的计算机或同一网络中的计算机使用我计算机的 ip 更改 localhost:

connection = pika.BlockingConnection(pika.ConnectionParameters(
       host='192.168.60.126'))

I get this error:我收到此错误:


>python rabbitMQReceiver.py
ERROR:pika.adapters.base_connection:Socket Error on fd 316: 10054
Traceback (most recent call last):
  File "rabbitMQReceiver.py", line 7, in <module>
    host='192.168.60.126'))
  File "C:\Python27\lib\site-packages\pika\adapters\base_connection.py", line 61, in __init__
    super(BaseConnection, self).__init__(parameters, on_open_callback)
  File "C:\Python27\lib\site-packages\pika\connection.py", line 513, in __init__
    self._connect()
  File "C:\Python27\lib\site-packages\pika\connection.py", line 804, in _connect
    self._adapter_connect()
  File "C:\Python27\lib\site-packages\pika\adapters\blocking_connection.py", line 146, in _adapter_connect
    self.process_data_events()
  File "C:\Python27\lib\site-packages\pika\adapters\blocking_connection.py", line 88, in process_data_events
    if self._handle_read():
  File "C:\Python27\lib\site-packages\pika\adapters\blocking_connection.py", line 184, in _handle_read
    super(BlockingConnection, self)._handle_read()
  File "C:\Python27\lib\site-packages\pika\adapters\base_connection.py", line 300, in _handle_read
    return self._handle_error(error)
  File "C:\Python27\lib\site-packages\pika\adapters\base_connection.py", line 264, in _handle_error
    self._handle_disconnect()
  File "C:\Python27\lib\site-packages\pika\adapters\blocking_connection.py", line 181, in _handle_disconnect
    self._on_connection_closed(None, True)
  File "C:\Python27\lib\site-packages\pika\adapters\blocking_connection.py", line 235, in _on_connection_closed
    raise exceptions.AMQPConnectionError(*self.closing)
pika.exceptions.AMQPConnectionError: (0, '')

I have no idea why, should I change something in the connection?我不知道为什么,我应该更改连接中的某些内容吗?

As a follow up on @Gas response.作为对@Gas 响应的跟进。

By default pika will connect using the default RabbitMQ credentials guest/guest .默认情况下,pika 将使用默认的 RabbitMQ 凭据guest/guest If you want to use your own credentials you need to provide your own PlainCredentials object.如果要使用自己的凭据,则需要提供自己的PlainCredentials对象。

credentials = pika.PlainCredentials(username='my_user', password='password')
connection = \
    pika.BlockingConnection(pika.ConnectionParameters(host='192.168.60.126',
                                                      credentials=credentials))

On the server you would need to add a user with the appropriate permissions.在服务器上,您需要添加具有适当权限的用户。 You can do this using the web interface, or by command line.您可以使用 Web 界面或命令行执行此操作。 More details available in the link provided by @Gas. @Gas 提供的链接中提供了更多详细信息。

rabbitmqctl add_user my_user password
rabbitmqctl set_permissions -p / my_user ".*" ".*" ".*"

These two command would give the user my_user all the permission it needs on virtual host / .这两个命令将为用户my_user提供它在虚拟主机/my_user所有权限。

It's a user grant problem .这是一个用户授权问题。

You are using the default user "guest ".您正在使用默认用户“guest”。

Please read this: Can't access RabbitMQ web management interface after fresh install请阅读: 全新安装后无法访问 RabbitMQ Web 管理界面

对于 macOS,您需要编辑/usr/local/etc/rabbitmq/rabbitmq-env.conf ,其中NODE_IP_ADDRESS=0.0.0.0而不是localhost

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM