首页 > 解决方案 > 事件中心发送失败 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(尽管我不相信应该归咎于这种配置)但没有成功,我个人的猜测是我的本地服务器 2 中有一些东西阻塞或干扰了我的通信。首先,我是否正确更改了超时值?我在这里检查了类的源代码:link 但似乎我做得对,但我实际上相信这样的属性意味着消息在队列中发送后的时间,而不是我们等待事件响应的时间。其次,有没有一种方法可以验证问题取决于我的本地服务器 2 的环境?例如像使用traceroute探索网络路径,还是挖掘?该系统是一个CentOS。会不会与 Python SDK 的新升级有关?我刚刚看到另一个问题,它表明我上传事件的方法已经升级,只是“01/08/2020”可能与此类升级有关(我对此表示怀疑)?

无论如何,任何线索将不胜感激。现在我将在其他服务器上进行测试并检查我是否可以设法将我的实现更改为较新的版本,看看是否能解决问题。

标签: pythonazurenetworkingazure-eventhub

解决方案


这听起来像一个网络问题。尝试在 server2 上的端口 9354 上 ping 命名空间的 TCP 端点。如果防火墙阻止到端点的出站连接,那么您需要修复它或尝试启用可以通过 443 的 websocket。


推荐阅读