Testy kondycji aplikacji platformy .NET w języku C#
Artykuł
W systemie rozproszonym kontrole kondycji są okresowymi ocenami stanu, dostępności i wydajności poszczególnych węzłów lub usług. Te testy zapewniają prawidłowe i wydajne działanie systemu. Kontrole kondycji są niezbędne dla niezawodności systemu i są zwykle wykonywane w regularnych odstępach czasu z wynikami analizowanych pod kątem podejmowania decyzji i działań naprawczych.
Możliwe są następujące wyniki sprawdzania stanu heath:
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Diagnostics.HealthChecks;
using Microsoft.Extensions.Hosting;
var builder = Host.CreateApplicationBuilder(args);
builder.Services.AddHealthChecks()
.AddResourceUtilizationHealthCheck();
var app = builder.Build();
var healthCheckService = app.Services.GetRequiredService<HealthCheckService>();
var result = await healthCheckService.CheckHealthAsync();
Console.WriteLine($"{result.Status}{result.TotalDuration}");
app.Run();
Ten dostawca będzie wskazywać, że aplikacja jest w dobrej kondycji tylko wtedy, gdy jest w pełni aktywna. Dopóki obiekt okresu istnienia nie wskaże, że aplikacja została uruchomiona, dostawca zgłosi aplikację jako nie w dobrej kondycji. Po rozpoczęciu zamykania aplikacji dostawca zgłosi aplikację jako złą kondycję.
Biblioteka uwidacznia HealthCheckService użytkownikom możliwość żądania kontroli kondycji w dowolnym momencie. Rozważmy następującą ExampleService implementację:
Implementuje IHostedLifecycleService interfejs z każdą metodą wywoływania CheckHealthAsync metody.
Definiuje metodę ReadyAsync , która wywołuje metodę CheckHealthAsync .
Definiuje metodę niestandardową CheckHealthAsync , która przechwytuje nazwę obiektu wywołującego i token anulowania, a następnie żąda sprawdzenia kondycji HealthCheckService z wystąpienia. Następnie jest rejestrowany result .
Jedynym czasem raportowania stanu HealthStatus.Healthy przez usługę kontroli kondycji jest po uruchomieniu aplikacji i przed jej zatrzymaniem. Rozważ następujące Program.cs:
C#
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Diagnostics.HealthChecks;
using Microsoft.Extensions.Hosting;
var builder = Host.CreateApplicationBuilder(args);
var healthChecksBuilder = builder.Services
.AddHostedService<ExampleLifecycle>()
.AddHealthChecks()
.AddApplicationLifecycleHealthCheck();
// You could use the healthChecksBuilder instance to add more checks...var app = builder.Build();
var services = app.Services.GetRequiredService<IEnumerable<IHostedService>>();
await Task.WhenAll(DelayAndReportAsync(services), app.RunAsync());
staticasync Task DelayAndReportAsync(IEnumerable<IHostedService> services)
{
// Ensure app started...await Task.Delay(500);
var service = services.FirstOrDefault(static s => s is ExampleLifecycle);
if (service is ExampleLifecycle example)
{
await example.ReadyAsync();
}
}
Pobiera element IHostedService od dostawcy usług. Jest ExampleService to wystąpienie.
Wywołania Task.WhenAll przy użyciu dwóch odwołań do zadań:
Metoda DelayAndReportAsync , która opóźnia 500 milisekund, a następnie wywołuje ReadyAsync metodę w wystąpieniu ExampleService , oceni kontrolę kondycji.
Aplikacja generuje dzienniki w następującej kolejności, zgłaszając stan kontroli kondycji w odniesieniu do zdarzeń cyklu życia:
StartingAsync:Niezdrowy
StartAsync:Niezdrowy
StartedAsync:Niezdrowy
ReadyAsync:Zdrowy
StoppingAsync:Niezdrowy
StopAsync:Niezdrowy
StoppedAsync:Niezdrowy
Innymi słowy, ten dostawca zapewnia, że wystąpienie aplikacji odbiera ruch tylko wtedy, gdy jest gotowy. Jeśli tworzysz aplikacje internetowe za pomocą platformy ASP.NET Core, dostępne jest oprogramowanie pośredniczące sprawdzania kondycji. Aby uzyskać więcej informacji, kontrola kondycji w usłudze ASP.NET Core.
Źródło tej zawartości można znaleźć w witrynie GitHub, gdzie można również tworzyć i przeglądać problemy i żądania ściągnięcia. Więcej informacji znajdziesz w naszym przewodniku dla współtwórców.
Opinia o produkcie .NET
.NET to projekt typu open source. Wybierz link, aby przekazać opinię:
Dołącz do serii meetup, aby tworzyć skalowalne rozwiązania sztucznej inteligencji oparte na rzeczywistych przypadkach użycia z innymi deweloperami i ekspertami.