Rabbitmq hello world 连接仅适用于本地主机 (python)
Rabbitmq hello world connection only works on localhost (python)
我从 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()
它可以工作,但是如果我从我自己的计算机或同一网络中的计算机将 localhost 更改为我计算机的 ip:
connection = pika.BlockingConnection(pika.ConnectionParameters(
host='192.168.60.126'))
我收到这个错误:
>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, '')
我不知道为什么,我应该更改连接中的某些内容吗?
这是用户授权问题。
您正在使用默认用户 "guest "。
请阅读:
Can't access RabbitMQ web management interface after fresh install
作为对@Gas 回复的跟进。
默认情况下,鼠兔将使用默认的 RabbitMQ 凭据进行连接 guest/guest
。如果您想使用自己的凭据,您需要提供自己的 PlainCredentials
对象。
credentials = pika.PlainCredentials(username='my_user', password='password')
connection = \
pika.BlockingConnection(pika.ConnectionParameters(host='192.168.60.126',
credentials=credentials))
在服务器上,您需要添加具有适当权限的用户。您可以使用 Web 界面或命令行执行此操作。 @Gas 提供的 link 中提供了更多详细信息。
rabbitmqctl add_user my_user password
rabbitmqctl set_permissions -p / my_user ".*" ".*" ".*"
这两个命令会给用户 my_user
在虚拟主机 /
上所需的所有权限。
对于 macOS,您需要编辑 /usr/local/etc/rabbitmq/rabbitmq-env.conf
,其中 NODE_IP_ADDRESS=0.0.0.0
而不是 localhost
我从 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()
它可以工作,但是如果我从我自己的计算机或同一网络中的计算机将 localhost 更改为我计算机的 ip:
connection = pika.BlockingConnection(pika.ConnectionParameters(
host='192.168.60.126'))
我收到这个错误:
>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, '')
我不知道为什么,我应该更改连接中的某些内容吗?
这是用户授权问题。
您正在使用默认用户 "guest "。
请阅读: Can't access RabbitMQ web management interface after fresh install
作为对@Gas 回复的跟进。
默认情况下,鼠兔将使用默认的 RabbitMQ 凭据进行连接 guest/guest
。如果您想使用自己的凭据,您需要提供自己的 PlainCredentials
对象。
credentials = pika.PlainCredentials(username='my_user', password='password')
connection = \
pika.BlockingConnection(pika.ConnectionParameters(host='192.168.60.126',
credentials=credentials))
在服务器上,您需要添加具有适当权限的用户。您可以使用 Web 界面或命令行执行此操作。 @Gas 提供的 link 中提供了更多详细信息。
rabbitmqctl add_user my_user password
rabbitmqctl set_permissions -p / my_user ".*" ".*" ".*"
这两个命令会给用户 my_user
在虚拟主机 /
上所需的所有权限。
对于 macOS,您需要编辑 /usr/local/etc/rabbitmq/rabbitmq-env.conf
,其中 NODE_IP_ADDRESS=0.0.0.0
而不是 localhost