Пакет SDK служебной шины Azure для Python приводит к тайм-ауту чтения при отправке сообщения в тему

В своем приложении я отправляю сообщение в тему на основе локального события. Это работает довольно хорошо, пока я не столкнусь с проблемой сети.

Что касается сети, мое устройство проходит через точку доступа, которая обеспечивает первичное / вторичное подключение к Интернету. Первичное соединение осуществляется через линию ADSL, но если это не удается, оно переключается на сеть LTE. Когда происходит переключение, IP-адрес моего устройства остается неизменным (поскольку он находится в локальной сети и назначается через DHCP).

Когда происходит это переключение, я обнаруживаю, что есть ошибка с командой отправки. Я получаю свое местное событие и пытаюсь отправить сообщение на служебную шину. Первая отправка приводит к «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) File" /usr/local/lib/python2.7/dist-packages/azure/servicebus/servicebusservic e.py ", строка 1109, в _perform_request resp = self._filter (запрос) Файл "/usr/local/lib/python2.7/dist-packages/azure/servicebus/_http/httpclient .py", строка 181, в perform_request self.send_request_body (соединение, request.body) Файл "/usr/local/lib/python2.7/dist-packages/azure/servicebus/_http/httpclient .py", строка 145, в send_request_body connection.send (None) Файл "/ usr / local / lib / python2. 7 / dist-пакеты / azure / servicebus / _http / requestscl ient.py ", строка 81, в send self.response = self.session.request (self.method, self.uri, data = request_bod y, headers = self.headers, timeout = self. таймаут) Файл "/usr/lib/python2.7/dist-packages/requests/sessions.py", строка 457, в req uest resp = self.send (prepare, ** send_kwargs) File "/ 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)


person yamspog    schedule 27.01.2016    source источник


Ответы (1)


По моему опыту, я думаю, что это проблема потока программы вашего встроенного приложения.

Вы можете попробовать добавить функцию тестирования, которая проверяет связь с хостом служебной шины в течение нескольких секунд, пока сеть не вернет логическое значение для запуска нового соединения после того, как устройство переключит сетевой адаптер. Между тем, подсчитайте пинг до указанного значения, чтобы вызвать команду оболочки, например service network restart или ifconfig <eth-id> down && ifconfig <eth-id> up, для перезапуска соответствующего сетевого адаптера.

Это просто идея. Не могли бы вы предоставить несколько кодов для оказания более полезной помощи?

person Peter Pan    schedule 28.01.2016