首页 文章

用于Python的Azure Service Bus SDK在向主题发送消息时导致读取超时

提问于
浏览
0

在我的应用程序中,我根据本地事件向主题发送消息 . 这很有效,直到我遇到网络问题 .

在网络方面,我的设备正在通过一个提供互联网主/辅连接的接入点 . 主要连接是通过ADSL线路,但如果失败,则切换到LTE网络 . 发生切换时,我的设备的IP地址保持不变(因为它在本地网络上并通过DHCP分配) .

发生此切换时,我发现send命令出错 . 我收到本地活动,并尝试向服务总线发送消息 . 第一次发送导致'ReadTimeout',但随后的发送很好 . 然后我得到另一个本地事件并尝试另一个发送,并且该过程重复 . 如果我重新启动设备,那么一切正常 .

这是堆栈跟踪:

文件“/usr/sbin/srvc/sb.py”,第420行,在ReadTimeout中:HTTPSConnectionPool(host ='**** . servicebus.windows.net',port = 443):读取超时 . (读取超时= 65)回溯(最近一次调用最后一次):文件“/usr/sbin/srvc/sb.py”,第420行,peek_lock = False,timeout = sb_timeout)文件“/ usr / local / lib / python2 .7 / dist-packages / azure / servicebus / servicebusservic e.py“,第976行,在receive_subscription_message超时)文件”/usr/local/lib/python2.7/dist-packages/azure/servicebus/servicebusservic e.py“ ,第762行,在read_delete_subscription_message response = self._perform_request(request)文件“/usr/local/lib/python2.7/dist-packages/azure/servicebus/servicebusservic e.py”,第1109行,在_perform_request resp = self中 . _filter(request)文件“/usr/local/lib/python2.7/dist-packages/azure/servicebus/_http/httpclient .py”,第181行,在perform_request中self.send_request_body(connection,request.body)文件“/在send_request_body connection.send(无)文件“/usr/local/lib/python2.7/dist -packages / azure / servicebus / _http / requestscl ient.py“,第81行,发送自我.response = self.session.request(self.method,self.uri,data = request_bod y,headers = self.headers,timeout = self.timeout)file“/usr/lib/python2.7/dist-packages/requests /sessions.py“,第457行,请求resp = self.send(prep,** send_kwargs)文件”/usr/lib/python2.7/dist-packages/requests/sessions.py“,第569行, sen dr = adapter.send(request,** kwargs)文件“/usr/lib/python2.7/dist-packages/requests/adapters.py”,第422行,在句子中引发ReadTimeout(e,request = request) ReadTimeout:HTTPSConnectionPool(host ='**** . servicebus.windows.net',port = 443):读取超时 . (读取超时= 65)

1 回答

  • -1

    根据我的经验,我认为这是嵌入式应用程序的程序流问题 .

    您可以尝试添加一个测试函数,该函数在几秒钟内ping服务总线主机间隔,直到网络正常返回布尔值以在设备切换网络适配器后启动新连接 . 同时,计数ping到指定值以调用shell命令(如 service network restartifconfig <eth-id> down && ifconfig <eth-id> up )以重新启动相关的网络适配器 .

    这只是一个想法 . 你能提供一些代码来提供更多有用的帮助吗?

相关问题