问题描述
我有一个兔子 mq 在机器上运行
i have a rabbit mq running on machine
- client 和 rabbitMQ 在同一个网络上运行
- rabbitMQ 有很多客户端
- 我可以从 rabbitMQ ping 客户端并返回
- 机器之间测得的最长延迟为 12.1 毫秒
- 网络详细信息:标准交换机网络(在单个物理机上运行的虚拟机网络 - 使用 vmware VC)
我在初始化 RPC 连接时随机超时
im getting random timeouts when initializing RPC connection
/usr/lib/python2.6/site-packages/pika-0.9.5-py2.6.egg/pika/adapters/blocking_connection.py
/usr/lib/python2.6/site-packages/pika-0.9.5-py2.6.egg/pika/adapters/blocking_connection.py
问题是超时时间不一致,时常发生.
problem is that the timeout isn't consistent and happens from time to time.
当手动测试此问题并在同一台机器上运行blocking_connection.py 1000 次时,它不会产生超时.
when manually testing this issue and running the blocking_connection.py 1000 times from the same machine that it fails no timeout accrue.
这是我失败时得到的错误:
this is the error i get when failing :
2013-04-23 08:24:23,396 runtest-trigger.24397 24397 DEBUG producer_rabbit initiate_rpc_connection Connecting to RabbitMQ RPC queue rpcqueue_java on host: auto-db1 2013-04-23 08:24:25,350 runtest-trigger.24397 24397 ERROR testrunner go Run 1354: cought exception: timed out Traceback (most recent call last): File "/testrunner.py", line 193, in go self.set_runparams(jobid) File "/testrunner.py", line 483, in set_runparams self.runparams.producers_testrun = self.initialize_producers_testrun(self.runparams) File "/basehandler.py", line 114, in initialize_producers_testrun producer.set_testcase_checkout() File "/baseproducer.py", line 73, in set_testcase_checkout self.checkout_handler = pm_checkout.get_producer(self.testcasecheckout) File "/producer_manager.py", line 101, in get_producer producer = self.load_producer(plugin_dir, producer_name) File "/producer_manager.py", line 20, in load_producer producer = getattr(producer_module, 'Producer')(producer_name, self.runparams) File "/producer_rabbit.py", line 13, in __init__ self.initiate_rpc_connection() File "/producer_rabbit.py", line 67, in initiate_rpc_connection self.connection = pika.BlockingConnection(pika.ConnectionParameters( host=self.conf.rpc_proxy)) File "/usr/lib/python2.6/site-packages/pika-0.9.5-py2.6.egg/pika/adapters/blocking_connection.py", line 32, in __init__ BaseConnection.__init__(self, parameters, None, reconnection_strategy) File "/usr/lib/python2.6/site-packages/pika-0.9.5-py2.6.egg/pika/adapters/base_connection.py", line 50, in __init__ reconnection_strategy) File "/usr/lib/python2.6/site-packages/pika-0.9.5-py2.6.egg/pika/connection.py", line 170, in __init__ self._connect() File "/usr/lib/python2.6/site-packages/pika-0.9.5-py2.6.egg/pika/connection.py", line 228, in _connect self.parameters.port or spec.PORT) File "/usr/lib/python2.6/site-packages/pika-0.9.5-py2.6.egg/pika/adapters/blocking_connection.py", line 44, in _adapter_connect self._handle_read() File "/usr/lib/python2.6/site-packages/pika-0.9.5-py2.6.egg/pika/adapters/base_connection.py", line 151, in _handle_read data = self.socket.recv(self._suggested_buffer_size) timeout: timed out
请帮忙
推荐答案
Pika 连接不同主机时出现超时问题.解决方案是在连接参数中传递 socket_timeout 参数.Pika 应该升级到>=0.9.14
Pika provides some time out issue when connecting different hosts.Solution is to pass a socket_timeout argument in connection parameter.Pika should upgrade to >=0.9.14
credentials = pika.PlainCredentials(RABBITMQ_USER, RABBITMQ_PASS) connection = pika.BlockingConnection(pika.ConnectionParameters( credentials=credentials, host=RABBITMQ_HOST, socket_timeout=300)) channel = connection.channel()