Концентратор событий Отправить не удалось MessageSendResult.Timeout Python

У меня были некоторые проблемы с тайм-аутами при отправке сообщений в EventHub.

import sys
import logging
import datetime
import time
import os

from azure.eventhub import EventHubClient, Sender, EventData


logger = logging.getLogger("azure")
ADDRESS = "xxx"
USER = "xxx"
KEY = "xxx"
ENDPOINT = "xxx"

try:
    if not ADDRESS:
        raise ValueError("No EventHubs URL supplied.")

    # Create Event Hubs client
    client = EventHubClient(ADDRESS, username=USER, password=KEY, debug=True)
    sender = client.add_sender(partition="0", send_timeout=300, keep_alive=10)
    client.run()
    try:
        start_time = time.time()
        for i in range(10000):
            print("Sending message: {}".format(i))
            message = "Message {}".format(i)
            sender.send(EventData(message))
    except:
        raise
    finally:
        end_time = time.time()
        client.stop()
        run_time = end_time - start_time
        logger.info("Runtime: {} seconds".format(run_time))

except KeyboardInterrupt:
    pass

Мой контекст следующий; я могу без проблем отправлять сообщения с моего персонального компьютера для разработки, с виртуальной машины в Azure и с локального сервера 1, но при попытке отправить сообщения на локальный сервер 2 я получаю сообщение об ошибке:

azure.eventhub.common.EventHubError: Send failed:  Message send failed with result: MessageSendResult.Timeout

Я попытался изменить send_timeout и keep_alive (хотя я не верю, что виноваты эти конфигурации), но безуспешно, мое личное предположение состоит в том, что на моем локальном server2 есть что-то, что блокирует или мешает моему общению. Во-первых, правильно ли я меняю значение тайм-аута? я проверил исходный код класса здесь: ссылка, но, кажется, я делаю это правильно, но я действительно верю, что такое свойство подразумевает время после того, как сообщение находится в очереди на отправку, а не то, как долго мы ждем реакция события. Во-вторых, есть ли способ проверить, что проблема связана с окружением моего локального сервера server2? например, исследовать сетевой путь с помощью traceroute или копать? Система - CentOS. Может ли это быть связано с новыми обновлениями в Python SDK? я только что видел этот другой вопрос, где он показывает, что мой метод для загрузки событий было обновлено только «08.01.2020», может быть, что-то связано с такими обновлениями (сомневаюсь)?

В любом случае, любые подсказки будут очень признательны. Сейчас я буду тестировать на других серверах и проверять, смогу ли я изменить свою реализацию на более новую версию и посмотреть, решит ли это проблему.


person frammnm    schedule 24.01.2020    source источник
comment
у меня такая же проблема   -  person Anarach    schedule 14.07.2020


Ответы (1)


Похоже на проблемы с сетью. Попробуйте пропинговать конечную точку TCP вашего пространства имен через порт 9354 на server2. Если брандмауэр блокирует исходящее соединение с конечной точкой, вам нужно либо исправить это, либо попробовать включить веб-сокеты, которые могут проходить через 443.

person Serkant Karaca    schedule 24.01.2020