Несколько конечных точек проверки работоспособности в. NET Core 3.x - PullRequest
1 голос
/ 08 января 2020

Есть ли способ настроить несколько конечных точек проверки работоспособности в. NET Core 3.x?

app.UseEndpoints(endpoints =>
{
    endpoints.MapHealthChecks("/health");
};

Это то, что у меня есть в настоящее время, и я не могу настроить другую поверх this.

В этом случае перенаправление не будет работать, так как одна из этих конечных точек будет работать за брандмауэром.

Ответы [ 2 ]

2 голосов
/ 08 января 2020

Поскольку HealthChecks является простым промежуточным программным обеспечением, вы всегда можете настроить конвейер так же, как и другие обычные промежуточные программы.

Например:

//in a sequence way
app.UseHealthChecks("/path1");
app.UseHealthChecks("/path2");

// in a branch way: check a predicate function dynamically
app.MapWhen(
    ctx => ctx.Request.Path.StartsWithSegments("/path3") || ctx.Request.Path.StartsWithSegments("/path4"), 
    appBuilder=>{
        appBuilder.UseMiddleware<HealthCheckMiddleware>();
    }
);

// use endpoint routing
app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
    endpoints.MapHealthChecks("/health1");
    endpoints.MapHealthChecks("/health2");
});

1 голос
/ 03 марта 2020

Не уверен, какова ваша цель иметь несколько конечных точек проверки работоспособности.

Если он поддерживает разные проверки работоспособности и готовности, то в документации Microsoft указан правильный подход " Фильтр Проверка работоспособности".

По сути, она основана на добавлении тегов к проверкам состояния и их использовании для маршрутизации на соответствующий контроллер. Вам не нужно указывать проверку работоспособности с помощью «живого» тега, когда вы получаете базовый c Http-тест из коробки.

В Startup.ConfigureServices ()

services.AddHealthChecks()
        .AddCheck("SQLReady", () => HealthCheckResult.Degraded("SQL is degraded!"), tags: new[] { "ready" })
        .AddCheck("CacheReady", () => HealthCheckResult.Healthy("Cache is healthy!"), tags: new[] { "ready" });

В Startup.Configure ()

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllers();
    endpoints.MapHealthChecks("/health/ready", new HealthCheckOptions()
    {
        Predicate = (check) => check.Tags.Contains("ready"),});

    endpoints.MapHealthChecks("/health/live", new HealthCheckOptions()
    {
        Predicate = (_) => false});
});
...