两台不同的机器通过rabbitmq公开对话?

两台不同的机器通过rabbitmq公开对话?,rabbitmq,amqpstorm,Rabbitmq,Amqpstorm,我已经在rackspace主机上设置了rabbitmq服务器。我已经完成了(python)教程。现在我想做同样的“hello world”教程,但我不想用示例脚本连接到localhost,而是想在两台完全不同的机器上运行send.py和receive.py 我一直在阅读这些文件,但我想我没有看到它们是如何结合在一起的。我想我可能需要做的是添加一个用户: sudo rabbitmqctl add_user xxx yyy 我确保它显示了一个用户列表 $ sudo rabbitmqctl list

我已经在rackspace主机上设置了rabbitmq服务器。我已经完成了(python)教程。现在我想做同样的“hello world”教程,但我不想用示例脚本连接到
localhost
,而是想在两台完全不同的机器上运行
send.py
receive.py

我一直在阅读这些文件,但我想我没有看到它们是如何结合在一起的。我想我可能需要做的是添加一个用户:

sudo rabbitmqctl add_user xxx yyy
我确保它显示了一个
用户列表

$ sudo rabbitmqctl list_users
Listing users ...
guest   [administrator]
xxx []
现在,我让我的
receive.py
在连接本地主机的服务器上运行。但是
send.py
,我转向了一个类似树莓的Linux SBC,并使用
amqpstorm
重写了它:

#!/usr/bin/env python3
import logging
from amqpstorm import Connection, Message

logging.basicConfig(level=logging.DEBUG)

def publisher():
    with Connection('abc.def.com', 'xxx', 'yyy') as connection:
        with connection.channel() as channel:
            channel.queue.declare(queue='hello')
            properties = {
                'content_type': 'text/plain',
                'headers': {'key': 'value'}
            }

            message = Message.create(channel, 'Vennlig Hilsen', properties)
            message.publish('hello')

if __name__ == '__main__':
    publisher()
这将导致以下错误:

# ./send.py 
DEBUG:amqpstorm.connection:Connection Opening
DEBUG:amqpstorm.channel0:Frame Received: Connection.Start
DEBUG:amqpstorm.channel0:Frame Sent: Connection.StartOk
DEBUG:amqpstorm.channel0:Frame Received: Connection.Tune
DEBUG:amqpstorm.channel0:Frame Sent: Connection.TuneOk
DEBUG:amqpstorm.channel0:Frame Sent: Connection.Open
Traceback (most recent call last):
  File "./xend.py", line 22, in <module>
    publisher()
  File "./xend.py", line 9, in publisher
    with Connection('abc.def.com', 'xxx', 'yay') as connection:
  File "/usr/lib/python3/dist-packages/amqpstorm/connection.py", line 70, in __init__
    self.open()
  File "/usr/lib/python3/dist-packages/amqpstorm/connection.py", line 191, in open
    self._wait_for_connection_state(state=Stateful.OPEN)
  File "/usr/lib/python3/dist-packages/amqpstorm/connection.py", line 314, in _wait_for_connection_state
    raise AMQPConnectionError('Connection timed out')
amqpstorm.exception.AMQPConnectionError: Connection timed out
#/send.py
调试:amqpstorm。连接:连接打开
调试:amqpstorm.channel0:收到帧:连接。启动
调试:amqpstorm.channel0:发送的帧:Connection.StartOk
调试:amqpstorm.channel0:接收到的帧:Connection.Tune
调试:amqpstorm.channel0:发送的帧:Connection.TuneOk
调试:amqpstorm.channel0:已发送帧:连接。打开
回溯(最近一次呼叫最后一次):
文件“/xend.py”,第22行,在
出版者()
publisher中第9行的文件“/xend.py”
以连接(“abc.def.com”、“xxx”、“yay”)作为连接:
文件“/usr/lib/python3/dist packages/amqpstorm/connection.py”,第70行,在__
self.open()
打开文件“/usr/lib/python3/dist packages/amqpstorm/connection.py”,第191行
self.\u等待\u连接\u状态(state=Stateful.OPEN)
文件“/usr/lib/python3/dist packages/amqpstorm/connection.py”,第314行,处于等待连接状态
raise AMQPConnectionError('连接超时')
amqpstorm.exception.AMQPConnectionError:连接超时
它非常快地抛出前6行调试代码,然后由于某种类型的超时错误而暂停

我走的路对吗?或是找错树了?我是否需要做更多的工作来配置我的用户(除了添加它之外,我什么都没做)?除了journalctl之外,还有其他地方可以看到服务器的日志记录吗

更新

$ tail -f /var/log/rabbitmq/rabbit\@server5.log

=INFO REPORT==== 18-Oct-2016::15:09:28 ===
accepting AMQP connection <0.307.0> (67.158.225.133:32786 -> 23.253.234.130:5672)

=ERROR REPORT==== 18-Oct-2016::15:09:32 ===
closing AMQP connection <0.307.0> (67.158.225.133:32786 -> 23.253.234.130:5672):
{handshake_error,opening,0,
                 {amqp_error,access_refused,
                             "access to vhost '/' refused for user 'xxx'",
                             'connection.open'}}
$tail-f/var/log/rabbitmq/rabbit\@server5.log
=信息报告===2016年10月18日::15:09:28===
接受AMQP连接(67.158.225.133:32786->23.253.234.130:5672)
=错误报告===2016年10月18日::15:09:32===
关闭AMQP连接(67.158.225.133:32786->23.253.234.130:5672):
{握手错误,打开,0,
{amqp_错误,访问被拒绝,
“用户'xxx'对vhost'/'的访问被拒绝”,
'连接.打开'}}

这告诉我,我必须另外做一些事情来授权
xxx
用户?

根据您的RabbitMQ日志,您似乎忘记了为新用户设置适当的权限

sudo rabbitmqctl set_permissions my_user ".*" ".*" ".*"
如果您使用的是其他虚拟主机,请不要忘记为该虚拟主机设置权限

sudo rabbitmqctl set_permissions -p my_virtual_host my_user ".*" ".*" ".*"

您可以在官方文档中阅读有关这些选项的更多信息。

这不是编码错误,而是DNS问题。尝试在您试图从中连接到RabbitMQ的主机上执行
ping abc.dev.com
。我能够从远程节点通过ssh连接到rackspace主机。所以我认为这不是DNS问题。我确保端口5672已打开,因此我认为这也不是防火墙问题。我已更新错误,我已将pika的错误版本复制到SBC,我认为。如果连接存在延迟,则可能是由于pika中默认设置的低套接字超时造成的。我个人会尝试更稳定的amqp库,如rabbitpy,或者我自己的风暴。