2013-04-23 58 views
3

我已經機鼠兔blocking_connection.py隨機超時連接到RabbitMQ的

  • 客戶端和RabbitMQ的在同一個網絡
  • 的RabbitMQ有許多客戶在運行上運行的兔MQ
  • 我可以ping客戶端from rabbitMQ and back
  • 機器間測量的最長延遲時間爲12.1 ms
  • 網絡詳細信息:標準交換機網絡(運行在單個物理機上的虛擬機的網絡 - 用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 

請協助

+0

什麼是你的網絡設置,這裏是客戶端和服務器的位置,您是否測量了這兩者之間的網絡延遲,您知道MQ是否有多個客戶端?這一切都可能導致超時錯誤,如果沒有這些(和更多)細節,解決問題將會很困難。 – SpankMe 2013-04-23 07:31:44

+0

感謝您的建議 ive添加了問題中的信息 – Nimrod007 2013-04-23 07:39:26

+0

在同一網絡上~12ms可能有點高,但是您還沒有提供足夠的詳細信息來說明是哪種網絡。但是,由於您明顯看到超時,您是否嘗試增加'socket_timeout'的值,如https://pika.readthedocs.org/en/latest/connecting.html? – SpankMe 2013-04-23 07:43:00

回答

1

我有一個類似的問題。如果一切看起來都很好,那麼你很可能會有某種未命中配置,例如壞綁定。如果配置丟失,那麼你會得到一個timeout,因爲腳本無法到達它認爲需要去的地方,所以在這種情況下錯誤可能會被忽略。

對於我的問題,我特別是與我的rabbitmq.config文件和我的綁定有問題,並必須使用我所示的命令行示例中的我的Python解決方案:RabbitMQ creating queues and bindings from a command line。一旦更新和正確配置,一切正常。希望這能讓你朝着正確的方向前進。

1

鼠兔提供了一些時間問題,當連接不同hosts.Solution是通過在連接socket_timeout參數parameter.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()