Python Pika 和 RabbitMQ 连接发布

标签 python rabbitmq amqp pika

尝试使用 Python 将数据发送到 RabbitMQ 队列。

我还没有配置服务器,但它正在为其他进程运行。我有一个可用的登录名,可以毫无问题地访问 Web 输出。

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)

最佳答案

But I guess the port doesn't change anything. It's port 15672 and the login is the same as I used to get on the browser output.

使用端口 5672 - 或您为 AMQP 监听器设置的任何默认端口。端口 15672 用于 web UI 访问,这是通过 HTTP 完成的,因此出现不兼容的协议(protocol)错误

关于Python Pika 和 RabbitMQ 连接发布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37079093/

相关文章:

python - 将数组添加到数据框列

python - 对于点和多边形的大型集合,有效地将点与几何体(多边形中的点)匹配

python - 异步: long running tasks with start delay

rabbitmq - 当 autoAck=true 时,可以看到正在运行的 rabbitmq 消息的数量

java - 如何将 %2f 传递给 java.net.URI 而不将其转换为/

api - 使用 http api 发布到默认的 rabbitmq exchange

java - 带有 AMQP 的 Azure 服务总线 - 如何指定 session ID

python - 只能将 '.sparse' 访问器与稀疏数据一起使用

c++ - 错误 : ‘POPT_ARG_ARGV’ undeclared. 我需要使用旧版 gcc 吗?

ios - iOS 设备上的 rabbitmq-c 不工作