gpt4 book ai didi

c# - Azure Functions 和 IHealthCheck

转载 作者:行者123 更新时间:2023-12-03 14:24:13 24 4
gpt4 key购买 nike

我需要为 Azure Functions 实现运行状况检查。

https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/health-checks?view=aspnetcore-3.0

但是,在我的情况下,我们需要在 NETCORE 2.2 中实现它,而不是使用 NETCORE 3.0

我们的主要问题是继承自 的启动类。功能启动 这与 MVC API 启动完全不同。因此,以下代码无法在 Startup.cs 中实现

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
//Readiness check
var port = int.Parse(Configuration["HealthManagementPort"]);
app.UseHealthChecks("/ready", port, new HealthCheckOptions()
{
Predicate = (check) => check.Tags.Contains("ready"),
});
app.UseHealthChecks("/live", port, new HealthCheckOptions()
{
//Exclude all checks and return 200-OK
Predicate = (_) => false,
});

}


有没有人遇到过类似的事情?我怎样才能实现类似的行为?

谢谢。

最佳答案

app.UseHealthChecks("/ready", port, new HealthCheckOptions()
{
Predicate = (check) => check.Tags.Contains("ready"),
});
UseHealthChecks 是注册 HealthCheckMiddleware 的扩展方法它调用 HealthCheckService 中名为 CheckHealthAsync 的方法类(class)
为了在 Azure 函数中实现这一点,您需要执行以下操作:
  • 添加 Microsoft.Extensions.Diagnostics.HealthCheck nuget 包。
  • 在您的 Startup.cs 类上注册您的健康检查
  •    services.AddHealthChecks()
    .AddCheck<SampleHealthCheck>("Sample")
    .AddCheck<Sample2HealthCheck>("Sample2");
  • 创建Http触发函数并注入(inject)HealthCheckService类
  • public class GetReady
    {
    private readonly HealthCheckService _healthCheckService;

    public GetReady(HealthCheckService healthCheckService)
    {
    _healthCheckService = healthCheckService;
    }

    [FunctionName(nameof(GetReady))]
    public async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Function, "get", Route = "ready")]
    HttpRequest req,
    CancellationToken cancellationToken)
    {
    var result = await _healthCheckService.CheckHealthAsync((check) => check.Tags.Contains("ready"), cancellationToken);
    return new OkObjectResult(result);
    }
    }
    你的端点应该和 aspnet 核心一样工作。

    关于c# - Azure Functions 和 IHealthCheck,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58574027/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com