2016-08-04 151 views
0

需要一些幫助!使用Rabbit MQ RPC運行python腳本。我得到一個Socket 104Socket closed when connection was open錯誤。下面是python的追溯和一些代碼:Rabbit MQ python腳本。連接打開時套接字關閉

Traceback (most recent call last): 
    File "./server.py", line 34, in <module> 
    channel.start_consuming() 
    File "/usr/lib/python2.6/site-packages/pika/adapters/blocking_connection.py", line 1681, in start_consuming 
    self.connection.process_data_events(time_limit=None) 
    File "/usr/lib/python2.6/site-packages/pika/adapters/blocking_connection.py", line 656, in process_data_events 
    self._dispatch_channel_events() 
    File "/usr/lib/python2.6/site-packages/pika/adapters/blocking_connection.py", line 469, in _dispatch_channel_events 
    impl_channel._get_cookie()._dispatch_events() 
    File "/usr/lib/python2.6/site-packages/pika/adapters/blocking_connection.py", line 1310, in _dispatch_events 
    evt.body) 
    File "./server.py", line 30, in on_request 
    body=json.dumps(DEVICE_INFO)) 
    File "/usr/lib/python2.6/site-packages/pika/adapters/blocking_connection.py", line 1978, in basic_publish 
    mandatory, immediate) 
    File "/usr/lib/python2.6/site-packages/pika/adapters/blocking_connection.py", line 2065, in publish 
    self._flush_output() 
    File "/usr/lib/python2.6/site-packages/pika/adapters/blocking_connection.py", line 1174, in _flush_output 
    *waiters) 
    File "/usr/lib/python2.6/site-packages/pika/adapters/blocking_connection.py", line 395, in _flush_output 
    raise exceptions.ConnectionClosed() 
pika.exceptions.ConnectionClosed 

回答

0

道歉,因爲我無法評論,由於低信譽。你能否提供更多關於如何打開連接的信息。它真的開放嗎?

這可能是因爲與rabbitmq服務器的連接丟失,因爲pika不處理斷開連接,並且經常導致類似的堆棧跟蹤。

我也有類似的問題,在我的情況下,這是因爲我的pika連接在某段時間後下降,我的同事能夠通過爲mq:port_number添加等待時間來解決此問題。

我們使用泊塢窗的容器,所以我們加入下面一行來我invoke.sh等待MQ:

filename.py --wait-secs 30 --port-wait mq:5672

我希望大家都能夠這樣做後,解決這個問題。

否則,最好在python腳本運行之前檢查連接是否被pika丟棄,或提供更多關於如何調用它的信息。

+0

你能幫助我如何設置等待時間嗎?我在我的unix機器上運行我的腳本 –

+0

您使用[rabbitmqctl](https://www.rabbitmq.com/man/rabbitmqctl.1.man.html)嗎?如果是這樣,它應該有無限超時,或者你可以顯式聲明超時?我不確定,但是如果打開或不打開,您可以首先在端口上使用nmap進行檢查。如果它是開放的,那麼問題將會是別的。但是,如果它在得到這個錯誤時關閉,那麼你可以檢查如何讓你的兔子mq服務器保持打開狀態。您還可以使用netcat強制打開端口,然後等待rabbit mq接受請求。 –

+0

您也可以簽出[rabbitmq.config](https://www.rabbitmq.com/configure.html)並增加handshake_timeout環境變量。但是如果您在帖子中包含更多詳細信息會更好,因爲這可以幫助其他人瞭解您的問題。 –