一. 前言

gRPC 服务实现健康检查有两种方式,前面在此文 ASP.NET Core gRPC 使用 Consul 服务注册发现 中有提到过,这里归纳整理一下。gRPC 的健康检查,官方是定义了标准的规则也就是 proto 的,所以这两种方式都大同小异。

二. 方法一

自己手动添加 proto 文件,然后自己实现健康检查服务。

新建一个 proto 文件,命名为 HealthCheck.proto

syntax = "proto3";

package grpc.health.v1;

message HealthCheckRequest {
string service = 1;
} message HealthCheckResponse {
enum ServingStatus {
UNKNOWN = 0;
SERVING = 1;
NOT_SERVING = 2;
}
ServingStatus status = 1;
} service Health {
rpc Check(HealthCheckRequest) returns (HealthCheckResponse); rpc Watch(HealthCheckRequest) returns (stream HealthCheckResponse);
}

这里面的内容不得更改,是官方标准,资料见后文

这里编译一下项目,以便自动生成代码。

然后,添加一个服务的实现类 HealthCheckService

public class HealthCheckService:Health.HealthBase
{
public override Task<HealthCheckResponse> Check(HealthCheckRequest request, ServerCallContext context)
{
//TODO:检查逻辑
return Task.FromResult(new HealthCheckResponse(){Status = HealthCheckResponse.Types.ServingStatus.Serving});
} public override async Task Watch(HealthCheckRequest request, IServerStreamWriter<HealthCheckResponse> responseStream, ServerCallContext context)
{
//TODO:检查逻辑
await responseStream.WriteAsync(new HealthCheckResponse()
{Status = HealthCheckResponse.Types.ServingStatus.Serving});
}
}

示例代码直接返回了检查结果,实际使用中应该在这里编写检查逻辑,然后根据情况返回相应的检查结果。检查结果有3种情况:

结果类型 说明
Unknown 未知状态
Serving 正常
NotServing 异常,不能提供服务

最后别忘了注册服务:

健康检查服务访问日志

三. 方法二

不用手动创建 proto 文件,直接安装官方的现成组件,这里面包含了通过上面的标准 proto 文件生成的类。所以重写实现类就行了。

通过 Nuget 安装 Grpc.HealthCheck

然后添加一个实现类 HealthCheckService 继承 HealthServiceImpl 最后重写方法,然后主要代码都适合上面一致的:

public class HealthCheckService:HealthServiceImpl
{
public override Task<HealthCheckResponse> Check(HealthCheckRequest request, ServerCallContext context)
{
//TODO:检查逻辑
return Task.FromResult(new HealthCheckResponse() { Status = HealthCheckResponse.Types.ServingStatus.Serving });
} public override async Task Watch(HealthCheckRequest request, IServerStreamWriter<HealthCheckResponse> responseStream, ServerCallContext context)
{
//TODO:检查逻辑
await responseStream.WriteAsync(new HealthCheckResponse()
{ Status = HealthCheckResponse.Types.ServingStatus.Serving });
}
}

后面操作步骤和方式一完全一样,此处省略。

四. 参考资料

ASP.NET Core gRPC 健康检查的实现方式的更多相关文章

  1. ASP.NET Core gRPC 入门全家桶

    一. 说明 本全家桶现在只包含了入门级别的资料,实战资料更新中. 二.官方文档 gRPC in Asp.Net Core :官方文档 gRPC 官网:点我跳转 三.入门全家桶 正片: ASP.NET ...

  2. ASP.NET Core gRPC 使用 Consul 服务注册发现

    一. 前言 gRPC 在当前最常见的应用就是在微服务场景中,所以不可避免的会有服务注册与发现问题,我们使用gRPC实现的服务可以使用 Consul 或者 etcd 作为服务注册与发现中心,本文主要介绍 ...

  3. 旧 WCF 项目迁移到 asp.net core + gRPC 的尝试

    一个月前,公司的运行WCF的windows服务器down掉了,由于 AWS 没有通知,没有能第一时间发现问题. 所以,客户提出将WCF服务由C#改为JAVA,在Linux上面运行:一方面,AWS对Li ...

  4. ASP.NET Core GRPC 和 Dubbo 互通

    一.前言 Dubbo 是比较流行的服务治理框架,国内不少大厂都在使用.以前的 Dubbo 使用的是私有协议,采集用的 hessian 序列化,对于多语言生态来说是极度的不友好.现在 Dubbo 发布了 ...

  5. ASP.Net Core下Authorization的几种方式 - 简书

    原文:ASP.Net Core下Authorization的几种方式 - 简书 ASP.Net Core下Authorization的几种方式 Authorization其目标就是验证Http请求能否 ...

  6. .Net Core实现健康检查

    ASP.NET Core 提供运行状况检查中间件和库,以用于报告应用基础结构组件的运行状况. 运行状况检查由应用程序作为 HTTP 终结点公开. 可以为各种实时监视方案配置运行状况检查终结点: 运行状 ...

  7. Dapr 运用之集成 Asp.Net Core Grpc 调用篇

    前置条件: <Dapr 运用> 改造 ProductService 以提供 gRPC 服务 从 NuGet 或程序包管理控制台安装 gRPC 服务必须的包 Grpc.AspNetCore ...

  8. Asp.Net Core Grpc 入门实践

    Grpc简介 gRPC 是一种与语言无关的高性能远程过程调用 (RPC) 框架. 在 gRPC 中,客户端应用程序可以直接调用不同计算机上的服务器应用程序上的方法,就像它是本地对象一样,从而更轻松地创 ...

  9. 【ASP.NET Core】自定义Session的存储方式

    在开始今天的表演之前,老周先跟大伙伴们说一句:"中秋节快乐". 今天咱们来聊一下如何自己动手,实现会话(Session)的存储方式.默认是存放在分布式内存中.由于HTTP消息是无状 ...

随机推荐

  1. 个人搭建后台管理模板 Bootstrap4 ,ASP.NET Core,EF Core,JWT

    拥有一个美观好用的网站后台,是很多开发者的梦想,笔者在闲暇时间里搭建了一个不错的后台框架,这里分享诸位开发同仁. 项目地址:https://github.com/kongdf123/KentNoteB ...

  2. Python 命令行之旅:深入 click 之增强功能

    作者:HelloGitHub-Prodesire HelloGitHub 的<讲解开源项目>系列,项目地址:https://github.com/HelloGitHub-Team/Arti ...

  3. poi-tl二次开发

    poi-tl二次开发 poi-tl是一款非常好用的word模板生成库,更新响应快.文档demo齐全.堪称word模板界的小军刀! 写在前面 如果你对word模板技术有了解.或者有兴趣,更甚者工作中接触 ...

  4. luogu P1566 加等式

    题目描述 对于一个整数集合,我们定义"加等式"如下:集合中的某一个元素可以表示成集合内其他元素之和.如集合{1,2,3}中就有一个加等式:3=1+2,而且3=1+2 和3=2+1是 ...

  5. IOS之文件夹创建、删除,图片在本地的保存和加载

    本文转自http://blog.csdn.net/toddmi/article/details/8204102 = (NSCachesDirectory, NSUserDomainMask, YES) ...

  6. ios 测试网络是否连接

    转自:http://blog.csdn.net/lwq421336220/article/details/16982857 - (BOOL) connectedToNetwork { //创建零地址, ...

  7. Nginx(http协议代理 搭建虚拟主机 服务的反向代理 在反向代理中配置集群的负载均衡)

    Nginx 简介 Nginx (engine x) 是一个高性能的 HTTP 和反向代理服务.Nginx 是由伊戈尔·赛索耶夫为俄罗斯访问量第二的 Rambler.ru 站点(俄文:Рамблер)开 ...

  8. ZOJ 2112 Dynamic Rankings(树状数组+主席树)

    The Company Dynamic Rankings has developed a new kind of computer that is no longer satisfied with t ...

  9. Keras开发一个神经网络

    关于Keras:Keras是一个高级神经网络API,用Python编写,能够在TensorFlow,CNTK或Theano之上运行. 使用一下命令安装: pip install keras 在Kera ...

  10. windows程序设计00_HelloWorld

    #include <windows.h> int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR sz ...