В соединении отказано из-за ограничения количества попыток соединения с запросом - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть скрипт, работающий на грани в IoT Azure, который выполняет некоторые вычисления, и как только программа вычисляет нужные цифры, я отправляю их в два места:

  • Назад в IoT Hub
  • Размещено на локальном URL с запросом lib

Теперь вот где возникает проблема;после нескольких дней запуска и исправления программа остановилась, и журналы показывают следующую проблему:

Traceback (most recent call last):
  File "/usr/local/lib/python3.5/dist-packages/urllib3/connection.py", line 159, in _new_conn
    (self._dns_host, self.port), self.timeout, **extra_kw)
  File "/usr/local/lib/python3.5/dist-packages/urllib3/util/connection.py", line 80, in create_connection
    raise err
  File "/usr/local/lib/python3.5/dist-packages/urllib3/util/connection.py", line 70, in create_connection
    sock.connect(sa)
ConnectionRefusedError: [Errno 111] Connection refused

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.5/dist-packages/urllib3/connectionpool.py", line 600, in urlopen
    chunked=chunked)
  File "/usr/local/lib/python3.5/dist-packages/urllib3/connectionpool.py", line 354, in _make_request
    conn.request(method, url, **httplib_request_kw)
  File "/usr/lib/python3.5/http/client.py", line 1107, in request
    self._send_request(method, url, body, headers)
  File "/usr/lib/python3.5/http/client.py", line 1152, in _send_request
    self.endheaders(body)
  File "/usr/lib/python3.5/http/client.py", line 1103, in endheaders
    self._send_output(message_body)
  File "/usr/lib/python3.5/http/client.py", line 934, in _send_output
    self.send(msg)
  File "/usr/lib/python3.5/http/client.py", line 877, in send
    self.connect()
  File "/usr/local/lib/python3.5/dist-packages/urllib3/connection.py", line         181, in connect
    conn = self._new_conn()
  File "/usr/local/lib/python3.5/dist-packages/urllib3/connection.py", line     168, in _new_conn
self, "Failed to establish a new connection: %s" % e)
urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection         object at 0x6c05f6f0>: Failed to establish a new connection: [Errno 111]     Connection refused

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.5/dist-packages/requests/adapters.py", line 449, in send
timeout=timeout
    File "/usr/local/lib/python3.5/dist-packages/urllib3/connectionpool.py", line 638, in urlopen
_stacktrace=sys.exc_info()[2])
  File "/usr/local/lib/python3.5/dist-packages/urllib3/util/retry.py", line 398, in increment
    raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='192.168.32.61', port=1880): Max retries exceeded with url: /camara (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x6c05f6f0>: Failed to establish a new connection: [Errno 111] Connection refused',))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/app/main.py", line 187, in <module>
    main()
  File "/app/main.py", line 161, in main
cameraCaptureSolver.start()
  File "/app/CameraCaptureSolver.py", line 161, in start
    requests.post('http://192.168.32.61:1880/camara', data = 'camaraName':camara})
  File "/usr/local/lib/python3.5/dist-packages/requests/api.py", line 116, in post
    return request('post', url, data=data, json=json, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/requests/api.py", line 60, in request
return session.request(method=method, url=url, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/requests/sessions.py", line 533, in request
resp = self.send(prep, **send_kwargs)
  File "/usr/local/lib/python3.5/dist-packages/requests/sessions.py", line 646, in send
r = adapter.send(request, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/requests/adapters.py", line 516, in send
raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPConnectionPool(host='192.168.32.61', port=1880): Max retries exceeded with url: /camara (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x6c05f6f0>: Failed to establish a new connection: [Errno 111] Connection refused',))

Следовательно, проблема связана с запросом, но я не знаю, было ли ограничение числа повторных попыток,

Есть идеи, как удалить или увеличить это число?

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Это не полный ответ, даже просто предложение сделать ориентацию вопроса.

Как вы сказали, «ограничение количества повторений», это автоматический механизм повторных попыток urllib3, число которыхколичество попыток по умолчанию равно 3, как указано в официальном документе ниже.

Повторные запросы

urllib3 могут автоматически повторять идемпотентные запросы.Этот же механизм также обрабатывает перенаправления.Вы можете контролировать повторные попытки, используя параметр retries для request ().По умолчанию urllib3 будет повторять запросы 3 раза и выполнять до 3 перенаправлений.

Вы можете установить количество повторных попыток с помощью пользовательского счетчика или отключить его, как показано в коде ниже.

http.request('GET', 'http://httpbin.org/ip', retries=10) // set 10 for reties
http.request('GET', 'http://nxdomain.example.com', retries=False) // disable retrying

Для ошибки ConnectionRefusedError, по моему опыту, есть много возможных причин, таких как:

  1. Работа в нестабильной сети или работа через проксикоторый не стабилен.
  2. Некоторые ограничения IoTHub или маркер доступа с истекшим сроком действия вызывают отказ в подключении.В этом случае вам необходимо проверить код состояния и соответствующую информацию об ошибке, чтобы выяснить причину посредством печати r.status и r.data для r = http.request(...).

. См. РазделIoT Hub limits из Azure subscription and service limits, quotas, and constraints для сравнения ваших данных с этими ограничениями, и есть коды ошибок IoT Hub и IoT Edge agent ниже и Reference - IoT Hub quotas and throttling, который поможет вам выяснить истинную причину.

Рис. 1. Распространенные ошибки IoT Hub enter image description here

Рис. 2Возможные ответы агента IoT Edge, отправленные в IoT Hub enter image description here

0 голосов
/ 04 февраля 2019

Обновление вашей подписки AWS должно увеличить количество запросов, которые вы можете отправить.

...