【发布时间】:2014-05-08 09:11:04
【问题描述】:
为什么我在使用 Asyncore 时会收到 AMQPConnectionError 而在使用 BlockingConnection 时却没有?
如果只是“Asyncore 在 Windows 中不起作用”,那就这样吧,尽管我还没有找到任何禁止使用它的东西。(这个问题与平台无关。)为了方便我想使用 Python 2.7 和 Python 3.4 上都可用的异步库,并且 Asyncore 应该在这里工作。
我将 RabbitMQ 3.2.4 与 Python 2.7.6 和 pika 0.9.13 一起使用。用户和管理员运行级别没有区别。除了上面更新的警告消息外,代码中记录器的存在与否与错误无关。在 Linux (Ubuntu 14.04) 和 Windows 7 中也出现了相同的错误,因此它不是平台问题。
由于 pika 使用 BlockingConnection 的性能相当差,我想尝试使用 Asyncore 适配器。对于测试台设置来说似乎很简单(我尝试给它提供凭据,尽管这无关紧要,如果没有给出回调,则回调将被剔除......无论哪种方式都失败了。):
按照教程使用 BlockingConnection - 它可以工作,但吞吐量较低:
connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
使用 AsyncoreConnection - 我尝试过的所有变体都会立即失败:
connection = pika.AsyncoreConnection(pika.ConnectionParameters(host='localhost'))
错误:
WARNING:pika.connection:Could not connect, 0 attempts left
Traceback (most recent call last):
File "C:\workspace\send.py", line 8, in <module>
connection = pika.AsyncoreConnection(pika.ConnectionParameters(host='localhost'))
File "C:\Python27\lib\site-packages\pika\adapters\asyncore_connection.py", line 135, in __init__
stop_ioloop_on_close)
File "C:\Python27\lib\site-packages\pika\adapters\base_connection.py", line 62, in __init__
on_close_callback)
File "C:\Python27\lib\site-packages\pika\connection.py", line 590, in __init__
self.connect()
File "C:\Python27\lib\site-packages\pika\connection.py", line 707, in connect
self.callbacks.process(0, self.ON_CONNECTION_ERROR, self, self)
File "C:\Python27\lib\site-packages\pika\callback.py", line 61, in wrapper
return function(*tuple(args), **kwargs)
File "C:\Python27\lib\site-packages\pika\callback.py", line 92, in wrapper
return function(*args, **kwargs)
File "C:\Python27\lib\site-packages\pika\callback.py", line 232, in process
callback(*args, **keywords)
File "C:\Python27\lib\site-packages\pika\connection.py", line 1192, in _on_connection_error
raise exceptions.AMQPConnectionError(self.params.connection_attempts)
pika.exceptions.AMQPConnectionError: 1
【问题讨论】: