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