2016-08-04 152 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环境变量。但是如果您在帖子中包含更多详细信息会更好,因为这可以帮助其他人了解您的问题。 –