Концентратор событий Не удалось отправить MessageSendResult.Timeout Python - PullRequest
0 голосов
/ 24 января 2020

У меня были некоторые проблемы с таймаутами при отправке сообщений в 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 (хотя я не верю, что виноваты эти конфигурации), но безуспешно, я лично предполагаю, что в моем локальном сервере 2 есть что-то, что блокирует или мешает моему общению , Во-первых, правильно ли я изменяю значение времени ожидания? я проверил исходный код класса здесь: ссылка но кажется, что я все делаю правильно, но я действительно верю, что такое свойство подразумевает время после того, как сообщение находится в очереди для отправки, а не как долго мы дождаться ответа на событие. Во-вторых, есть ли способ, которым я могу проверить, что проблема зависит от envoiroment моего локального сервера2? например, исследовать сетевой путь с помощью traceroute или копать? Система является CentOS. Может ли это быть связано с новыми обновлениями в Python SDK? я только что увидел этот другой вопрос , где он показывает, что мой метод загрузки событий был обновлен только до «01/08/2020», может быть, что-то связано с такими обновлениями (я сомневаюсь в этом)?

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

1 Ответ

0 голосов
/ 24 января 2020

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...