Python Pika blocking_connection.py连接到RabbitMQ的随机超时

Python Pika blocking_connection.py连接到RabbitMQ的随机超时,python,rabbitmq,rpc,pika,python-pika,Python,Rabbitmq,Rpc,Pika,Python Pika,我有一个兔子mq在机器上运行 客户端和rabbitMQ都在同一网络上运行 rabbitMQ有许多客户端 我可以从rabbitMQ来回ping客户端 机器之间测得的最长延迟为12.1毫秒 网络详细信息:标准交换机网络(在单个物理机上运行的虚拟机网络-使用vmware VC) 初始化RPC连接时,我收到随机超时 /usr/lib/python2.6/site-packages/pika-0.9.5-py2.6.egg/pika/adapters/blocking_connection.py 问题

我有一个兔子mq在机器上运行

  • 客户端和rabbitMQ都在同一网络上运行
  • rabbitMQ有许多客户端
  • 我可以从rabbitMQ来回ping客户端
  • 机器之间测得的最长延迟为12.1毫秒
  • 网络详细信息:标准交换机网络(在单个物理机上运行的虚拟机网络-使用vmware VC)
初始化RPC连接时,我收到随机超时

/usr/lib/python2.6/site-packages/pika-0.9.5-py2.6.egg/pika/adapters/blocking_connection.py

问题是超时时间不一致,并且经常发生

手动测试此问题并从失败的同一台机器上运行blocking_connection.py 1000次时,不会产生超时

这是失败时出现的错误:

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

请协助

我也有类似的问题。如果一切看起来都很好,那么您很可能会错过某种配置,例如绑定不好。如果未配置,那么您将得到一个
超时
,因为脚本无法到达它认为需要到达的位置,因此在这种情况下,错误可能是未引导


对于我的问题,我的
rabbitmq.config
文件和绑定都有问题,必须使用我的python解决方案,如:中所示,而不是我展示的命令行示例。一旦正确地进行了更新和配置,一切正常。希望这能让您走上正确的方向。

Pika在连接不同主机时提供了一些超时问题。解决方案是在连接参数中传递一个
socket\u timeout
参数。Pika应该升级到>=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()

您的网络设置是什么,客户机和服务器位于何处,您是否测量了这两者之间的网络延迟,您是否知道MQ是否有许多客户机?所有这些都会导致超时错误,如果没有这些(以及更多)详细信息,解决问题将非常困难。感谢您的建议,我在问题中添加了关于同一网络的信息~12ms可能有点高,但您没有提供关于这是哪种网络的足够详细信息。但是,由于您明显看到超时,您是否尝试过增加
socket\u timeout
值,如中所示?