gRPC HealthCheck
2022. 12. 15. 00:00ㆍASPNET/ASPNET 7
반응형
gRPC 상태를 검사하기 위한 방법이 있다.
gRPC 상태 검사 프로토콜이 있고 이것은 server 앱의 상태를 보고하기 위한 표준이다.
Grpc.AspNetCore.HealthChecks 패키지에서 gRPC 상태 검사를 기본적으로 지원한다.
.NET 상태 검사의 결과는 호출자에게 보고한다.
gRPC 상태 검사 설정
- Grpc.AspNetCore.HealthChecks 패키지 참조를 추가.
- gRPC 상태 검사 서비스를 등록
- AddGrpcHealthChecks - 상태 검사를 사용하는 서비스를 등록
- MapGrpcHealthChecksService - 상태 검사 서비스 엔드포인트를 추가
- IHealthCheck를 구현하거나 AddCheck 메서드를 사용하여 상태 검사를 추가
gRPC service 프로젝트를 만듭니다.
https://yogingang.tistory.com/230
grpc with aspnet core
aspnet core 를 통해 grpc server 를 생성 할 수 있다. Protos/greet.proto 수정 syntax = "proto3"; option csharp_namespace = "GrpcInterface"; //
yogingang.tistory.com
다음과 같이 nuget package 를 추가 합니다.
dotnet add package Grpc.AspNetCore.HealthChecks
Program.cs 를 다음과 같이 변경합니다.
using GrpcHealthCheck.Services;
using Microsoft.Extensions.Diagnostics.HealthChecks;
var builder = WebApplication.CreateBuilder(args);
// Additional configuration is required to successfully run gRPC on macOS.
// For instructions on how to configure Kestrel and gRPC clients on macOS, visit https://go.microsoft.com/fwlink/?linkid=2099682
// Add services to the container.
builder.Services.AddGrpc();
builder.Services.AddGrpcHealthChecks()
.AddCheck("Sample", () => HealthCheckResult.Healthy());
var app = builder.Build();
// Configure the HTTP request pipeline.
app.MapGrpcService<GreeterService>();
app.MapGet("/", () => "Communication with gRPC endpoints must be made through a gRPC client. To learn how to create a client, visit: https://go.microsoft.com/fwlink/?linkid=2086909");
app.MapGrpcHealthChecksService();
app.Run();
이제 client 를 생성 하여 다음과 같은 코드를 만듭니다.
두가지 package 를 추가 합니다.
dotnet add package Grpc.HealthCheck
dotnet add package Grpc.Net.Client
Program.cs 를 변경하세요
using Grpc.Core;
using Grpc.Health.V1;
using Grpc.Net.Client;
var channel = GrpcChannel.ForAddress("https://localhost:7119");
var client = new Health.HealthClient(channel);
var response = await client.CheckAsync(new HealthCheckRequest());
Console.WriteLine(response.Status);
check 가 아닌 watch 를 이용하는 방법도 있다.
using Grpc.Core;
using Grpc.Health.V1;
using Grpc.Net.Client;
try
{
var channel = GrpcChannel.ForAddress("https://localhost:7119");
var client = new Health.HealthClient(channel);
var response = client.Watch(new HealthCheckRequest());
var cancelToken = new CancellationToken();
while (await response.ResponseStream.MoveNext(cancelToken))
{
Console.WriteLine("Into while loop");
var current = response.ResponseStream.Current;
Console.WriteLine($"{current.Status}");
}
}
catch (RpcException ex)
{
Console.WriteLine($"Error: {{Code: {ex.StatusCode}, Status: {ex.Status.Detail}}}");
}
여러가지 옵션이 있지만 그중에서도 상태 검사 실행 간격을 구성할 수 있다.
서버쪽에서 다음과 같이 설정한다.
builder.Services.Configure<HealthCheckPublisherOptions>(options =>
{
options.Delay = TimeSpan.Zero;
options.Period = TimeSpan.FromSeconds(10);
});
관련영상
반응형
'ASPNET > ASPNET 7' 카테고리의 다른 글
Rest API Template 만들기 - EP 02 (Vertical Slice, MediatR) (0) | 2022.12.22 |
---|---|
Rest API Template 만들기 - EP 01 (Create , Swagger, Logging) (0) | 2022.12.19 |
ASPNET 7 - Endpoint Filter (0) | 2022.12.12 |
ASPNET 7 - Authentication (0) | 2022.12.08 |
ASPNET 7 - Route Group and Swagger (0) | 2022.12.05 |