我有一个在 Azure 上运行的 Node.js 计时器函数(Node.js v18、Linux、Conclusion)间歇性失败,原因似乎是 DNS 查找失败。该功能每 30 分钟运行一次。它会正常工作几天,然后开始出现故障 12-24 小时,然后再次开始工作。
这是日志中的错误。当
@hubspot/api-client
库向 HubSpot API 发送请求时,会发生此错误。这是一个公共 API,主机为 api.hubapi.com。
Exception: request to https://api.hubapi.com/crm/v3/objects/products?limit=100&after=2663219990&properties=hs_lastmodifieddate%2Chs_sku%2Chs_images&archived=false failed, reason: getaddrinfo EAI_AGAIN api.hubapi.com
根据我的研究,以下是我尝试过的一些方法:
@hubspot/api-client
依赖项更新到最新版本,以防库出现问题。这两项更改并没有帮助解决问题。此功能在本地以及之前部署的 GCP 上运行良好。
只是一些想法:
从消费计划中的 Azure 函数运行任何 http 请求都可能会产生此类异常(在 .net 中):
• 没有已知的此类主机
• 请求被取消
• 无法解析远程名称
• 未从远程服务器收到完整响应
• 无法将完整的请求发送到远程服务器
• 请求的名称有效,但未找到请求类型的数据
• 连接尝试失败,因为连接方未正确
这些通常源于您在没有 vNet 的情况下运行并使用某种共享或公共 DNS 服务器的事实。相比之下,针对其他 Azure 服务(PAAS、IAAS 等)的 SDK 操作具有嵌入的重试功能,因此您不会正式遇到这些错误。因此,总的来说,如果使用中的 Azure Functions 必须通过 http 客户端连接到任何其他服务,则必须确保这些连接具有重试功能。