【发布时间】:2016-05-06 18:26:11
【问题描述】:
尝试使用 Python 将数据发送到 RabbitMQ 队列。
我尚未配置服务器,但它正在为其他进程运行。我有一个有效的登录名,可以毫无问题地访问网络输出。
RabbitMQ 给出的 Python 使用 Pika 的示例代码:
#!/usr/bin/env python
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters(
host='xxx.xxx.xxx.xxx:xxxxx'))
channel = connection.channel()
channel.queue_declare(queue='Test')
channel.basic_publish(exchange='',
routing_key='hello',
body='Hello World!')
print(" [x] Sent 'Hello World!'")
connection.close()
这运行并将我踢开:
pika.exceptions.ConnectionClosed
没有太多事情要做,但安全假设是一个登录问题,因为示例代码没有任何登录信息。
所以我添加了它。
import pika
import sys
try:
credentials = pika.PlainCredentials('username', 'password')
connection = pika.BlockingConnection(pika.ConnectionParameters('xxx.xxx.xxx.xxx',
xxxxx,
'virtualhostnamehere',
credentials,))
channel = connection.channel()
channel.queue_declare(queue='Test')
channel.basic_publish(exchange='amq.direct',
body='Hello World!')
print(" [x] Sent 'Hello World!'")
except:
e = sys.exc_info()[0]
print e
它似乎在给我之前徘徊了几分钟:
<class 'pika.exceptions.IncompatibleProtocolError'>
服务器运行其他服务正常,但我似乎无法确定我做错了什么。
登录正确。虚拟主机名是正确的。楼主是对的。交易所名称正确。
希望能指出正确的方向。
更新:
我也尝试过使用 URLParameters,结果相同。
parameters = pika.URLParameters('amqp://username:password@xxx.xxx.xxx.xxx:xxxxx/notmyvhostname')
connection = pika.BlockingConnection(parameters)
【问题讨论】:
-
您使用的是哪个端口和用户名?
-
我已将登录名替换为“用户名”和“密码”,并将端口替换为 xxxxx。
-
但我猜这个端口并没有改变任何东西。它是端口 15672,登录方式与我在浏览器输出时使用的登录方式相同。