Azure Bot 服务:无法将请求转发到应用程序

问题描述 投票:0回答:1

我们使用Bot框架开发了一个机器人,它部署在Azure上并在Azure Bot服务上运行。目前有两个渠道:Slack 和 MS Teams。 该机器人是使用瀑布模型构建的,我们有一个预定义的步骤结构。

所用技术:

  1. Python(aiohttp、uvloop)
  2. 宇宙数据库

在开发环境中,python 代码在 P1v2 层(1CPU:1Core,3.50 GB RAM)上使用gunicorn和2个worker运行。

问题: 当我们仅使用 2 个用户(或更多)同时(来自 Slack 或 Teams)测试我们的机器人时,一段时间后 Azure 开始抛出以下错误:

Failed to forward request to application. Encountered a System.Net.Http.HttpRequestException exception after 1085.488ms with message: An error occurred while sending the request.. Check application logs to verify the application is properly handling HTTP traffic.

另请参阅随附的应用程序日志屏幕截图。

我们也研究了它的流量管理器功能并尝试实现它。但其中可用的方法,似乎不适合这种情况。

上面提到的错误是Azure抛出的,请求没有到达我们的代码。此外,在这个错误之后,如果我们再次发送消息,它会到达我们的代码,响应也从代码成功发送,但它永远不会到达 Slack 或 Teams 的用户。

我们的期望是至少 2 个用户应该能够在 1 个 CPU 上同时与机器人对话,这也很低。

我们已经研究这个问题数周,但尚未找到任何可行的解决方案。

如有任何帮助,我们将不胜感激。

python azure botframework aiohttp azure-bot-service
1个回答
0
投票

我解决了这个问题的一个变体。我的解决方案涉及以下内容,因为我花了超过 48 小时的体力劳动来研究这个问题,我想我会将其留在这里以添加到知识体系中。对于上下文,我的设置涉及使用 Uvicorn 为我的 FastAPI 后端提供服务的 Azure Web App 服务,我通过 Docker 将其部署为容器化实例:""" 看来我最终解决了这个问题。在我的 Gunicorn.conf.py 文件中,我需要指定超时 = 值 >30(默认值)。我的 API 预计在某些请求上花费 >1 分钟,我必须指出这一点。

此外,我需要将 Dockerfile 中的行设置为以下内容才能强制执行此参数。

CMD [“gunicorn”,“-c”,“gunicorn.conf.py”,“main:app”]

© www.soinside.com 2019 - 2024. All rights reserved.