我似乎无法运行代码-我一直在使用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>

最佳答案

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

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

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


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

我检查了examples with pika,它们起作用了,因为pika在不存在时创建了队列(名称为hello),以便可以安全地从该队列发送和接收消息。

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



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

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() # <---

关于python - 无法获得适用于RabbitPy的示例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40385621/

10-11 04:17