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