无法为RabbitPy

时间:2016-11-02 17:01:04

标签: python rabbitmq rabbitpy

我似乎无法运行代码 - 我一直在使用Pika并且热衷于尝试这个线程安全且可能更整洁的版本。

import rabbitpy

with rabbitpy.Connection('amqp://guest:guest@localhost:5672/%2f') as conn:
    with conn.channel() as channel:
        queue = rabbitpy.Queue(channel, 'example')

        # Exit on CTRL-C
        try:
            # Consume the message
            for message in queue:
                message.pprint(True)
                message.ack()

        except KeyboardInterrupt:
            print 'Exited consumer' 

我得到的错误:

Traceback (most recent call last):
  File "newshift.py", line 3, in <module>
    with rabbitpy.Connection('amqp://guest:guest@localhost:5672/%2f') as conn:
AttributeError: 'module' object has no attribute 'Connection'

我的系统设置为:

numpy==1.11.2
pamqp==1.6.1
pandas==0.19.0
pika==0.10.0
pkg-resources==0.0.0
python-dateutil==2.5.3
pytz==2016.7
rabbitpy==1.0.0
six==1.10.0
SQLAlchemy==1.1.3
dir(rabbitpy)
['__builtins__', '__doc__', '__file__', '__name__', '__package__']

以某种方式在模块中加载时看不到类

原始问题是由.pyc文件挂起引起的,但新的错误消息是:

Traceback (most recent call last):
  File "newshift.py", line 15, in <module>
    print 'Exited consumer' 
  File "/home/brett/code/SimpleConsumers/local/lib/python2.7/site-packages/rabbitpy/connection.py", line 149, in __exit__
    raise exc_val
rabbitpy.exceptions.AMQPNotFound: <pamqp.specification.Channel.Close object at 0x7f39a91da7d0>

1 个答案:

答案 0 :(得分:1)

rabbitpy.exceptions.AMQPNotFound: <pamqp.specification.Channel.Close

我认为rabbitpy会出现此错误,因为它会尝试连接名称为queue的不存在的example

queue = rabbitpy.Queue(channel, 'example')

rabbitpy如果尚未存在,则不会创建此队列。

我检查了examples with pika并且它们有效,因为pika创建了队列(名称为hello),当它不存在时,它可以安全地从此队列发送和接收。

pika会在两种情况下自动创建队列 - 当您发送或接收消息时。

您可以使用命令(在Linux上)检查rabbitmq中的现有队列

sudo rabbitmqctl list_queues

即。结果

Listing queues ...
celery  3
hello   0
...done.

如果我发送带有pika的邮件,那么我可以通过rabbitpy收到邮件,因为pika会创建队列(如果它不存在),然后rabbitpy可以安全使用这个队列。

如果它不存在,你必须使用queue.declare()来创建队列。

import rabbitpy

with rabbitpy.Connection('amqp://guest:guest@localhost:5672/%2f') as conn:
    with conn.channel() as channel:
        queue = rabbitpy.Queue(channel, 'example')
        queue.declare() # <---