我在向 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 中的虚拟机以及本地 server1 发送消息,但是当尝试将消息发送到本地 server2 时,我收到错误:
azure.eventhub.common.EventHubError: Send failed: Message send failed with result: MessageSendResult.Timeout
我尝试修改send_timeout和keep_alive(尽管我不相信这个配置是罪魁祸首)但没有成功,我个人的猜测是我的本地server2中有一些东西阻止或干扰了我的通信。首先,我是否正确更改了超时值?我在这里检查了该类的源代码:link但看来我做得对,但我实际上相信这样的属性意味着消息进入队列发送后的时间,而不是我们等待事件响应的时间。其次,有没有办法可以验证问题是否依赖于我的本地 server2 的环境?例如,使用traceroute或dig探索网络路径?系统是CentOS。是否与Python SDK的新升级有关?我刚刚看到了另一个question它显示我上传事件的方法已升级,只是“01/08/2020”可能与此类升级相关(我对此表示怀疑)?
无论如何,任何线索都将不胜感激。现在我将在其他服务器上进行测试,并检查我是否可以设法将我的实现更改为较新的版本,看看是否可以解决问题。
最佳答案
这听起来像是网络问题。尝试在 server2 上的端口 9354 上 ping 命名空间的 TCP 端点。如果防火墙阻止到端点的出站连接,那么您需要修复它或尝试启用可以通过 443 的 Websocket。
关于python - 事件中心发送失败 MessageSendResult.Timeout Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59896416/