簡體   English   中英

皮卡blocking_connection.py隨機超時連接到RabbitMQ

[英]Pika blocking_connection.py random timeout connecting to RabbitMQ

我在機器上運行了兔子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

請協助

我有一個類似的問題。 如果一切正常,則您很可能具有某種未命中的配置,例如,綁定錯誤。 如果配置了miss,那么您將獲得timeout因為腳本無法到達它認為需要執行的操作,因此在這種情況下,錯誤可能導致未命中。

對於我的問題,我特別遇到了rabbitmq.config文件和綁定的問題,並且必須使用以下所示的python解決方案: RabbitMQ通過命令行在顯示的示例中創建隊列和綁定 一旦更新並正確配置,一切正常。 希望這能使您朝正確的方向發展。

當連接不同的主機時,Pika提供了一些超時問題。解決方案是在連接參數中傳遞一個socket_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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM