【问题标题】:Http Trigger Azure function returns 404 randomlyHttp Trigger Azure函数随机返回404
【发布时间】:2020-06-11 23:27:43
【问题描述】:

我们在函数运行时 3 上有一个 .net core azure 函数。它在本地运行得非常好,而且大部分时间都在我们部署的应用服务上运行。但是,我们遇到过间歇性的 404 响应请求,而这些请求在其他时间完全正常。

对于失败的请求,我们的日志或应用程序洞察遥测中没有出现任何条目。

感觉很像azure-function-host github项目上的这个问题: https://github.com/Azure/azure-functions-host/issues/5247 虽然这是针对函数运行时 1 或 2。

有没有人遇到过类似的问题或知道任何方法可以获取可能突出我们遇到的问题的额外日志信息。

【问题讨论】:

    标签: azure azure-functions http-status-code-404 serverless


    【解决方案1】:

    这可能发生在横向扩展或您的函数应用将服务器从一个更改为另一个(出于某种原因)期间。这实际上是无服务器应用程序的缺点。

    但是我可以给你的建议是:

    • 创建类似这样的心跳函数:

      private readonly IAsyncRepository<Business> _businessAsyncRepository;
      
      public HeartBeat(IAsyncRepository<Business> businessAsyncRepository)
      {
          // Your all DI injections are here
          _businessAsyncRepository = businessAsyncRepository;
      }
      
      [FunctionName(nameof(HeartBeat))]
      public async Task<IActionResult> Run(
          [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)] HttpRequest req,
          ILogger log)
      {
          string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
          dynamic data = JsonConvert.DeserializeObject(requestBody);
          return new OkObjectResult("OK");
      }
      

    然后在 Application Insights 上创建可用性测试并调用 HeartBeat。

    这也将始终为您提供一个温暖的 Azure Functions 实例。但很明显,每次调用心跳时,您都会将 100 万免费通话花费在消费计划上,具体取决于您调用 AF 的频率。

    【讨论】:

    • 这是一个相当大的堆栈的一部分,因此支付几个电话费用不是问题。然而,令人惊讶的是,当有更合适的 http 代码时,azure 函数主机中间件会选择为合法请求返回 404 ......或者当它应该启动一个实例来响应时。虽然创建心跳函数并不复杂,但在我们所有的函数应用程序上都使用它有点傻。
    • 我完全理解你。我只是想知道当您在您的案例中实施此解决方案时会发生什么。你能告诉我之后的输出吗?
    猜你喜欢
    • 1970-01-01
    • 2021-08-24
    • 2020-08-28
    • 2020-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-23
    相关资源
    最近更新 更多