【微服务部署】03-健康检查

这篇具有很好参考价值的文章主要介绍了【微服务部署】03-健康检查。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 探针集成实现高可用

  • Liveness
  • Readiness
  • Startup

1.1 LivenessProbe

  • 判断服务是否存活
  • 结束“非存活”状态服务
  • 根据重启策略决定是否重启服务

1.2 ReadinessProbe

  • 判断服务是否“就绪”
  • “就绪”状态的服务可以接收请求
  • 非“就绪”状态的服务将会被从流量负载中摘除

1.3 StartupProbe

  • 检测应用程序是否启动成功
  • 启动探针执行成功后,将不再执行,除非应用重启
  • 当启动探针检测成功后,其它探针才开始工作
  • 适合启动较慢的应用配置
  • Kuberbetes 1.16以后的支持
// startup
internal static bool Ready { get; set; } = true;
internal static bool Live { get; set; } = true;

public void ConfigureServices(IServiceCollection services)
{
	...
	// 注册健康检查
	services.AddHealthChecks()
            .AddMySql(Configuration.GetValue<string>("Mysql"), "mysql", tags: new string[] { "mysql", "live", "all" })// tags标签分组
             .AddRabbitMQ(s =>
             {
                 var connectionFactory = new RabbitMQ.Client.ConnectionFactory();
                 Configuration.GetSection("RabbitMQ").Bind(connectionFactory);
                 return connectionFactory;
             }, "rabbitmq", tags: new string[] { "rabbitmq", "live", "all" })
             .AddCheck("liveChecker", () =>
             {
                 return Live ? HealthCheckResult.Healthy() : HealthCheckResult.Unhealthy();
             }, new string[] { "live", "all" })
             .AddCheck("readyChecker", () =>
             {
                 return Ready ? HealthCheckResult.Healthy() : HealthCheckResult.Unhealthy();
             }, new string[] { "ready", "all" });
}

// 
 public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
 {
 	...
 	app.UseEndpoints(endpoints =>
            {
                endpoints.MapMetrics();
                endpoints.MapHealthChecks("/live", new HealthCheckOptions { Predicate = registration => registration.Tags.Contains("live") });// 检查标记了live的检查项
                endpoints.MapHealthChecks("/ready", new HealthCheckOptions { Predicate = registration => registration.Tags.Contains("ready") });
                endpoints.MapHealthChecks("/hc", new Microsoft.AspNetCore.Diagnostics.HealthChecks.HealthCheckOptions
                {
                    ResponseWriter = HealthChecks.UI.Client.UIResponseWriter.WriteHealthCheckUIResponse
                });// 没有传检查项,检查所有
                endpoints.MapControllers();
                endpoints.MapGrpcService<GeekTime.Ordering.API.Grpc.OrderServiceImpl>();
            });
 }
 
 // Controller调用
 // 设置Ready的值
 [HttpGet]
 public IActionResult SetReady([FromQuery]bool ready)
 {
     Startup.Ready = ready;
     if (!ready)
     {
         Task.Run(async () =>
         {
             await Task.Delay(60000);
             Startup.Ready = true;
         });
     }
     return Content($"{Environment.MachineName} : Ready={Startup.Ready}");
 }
 
 // 设置live
[HttpGet]
public IActionResult SetLive([FromQuery]bool live)
 {
     Startup.Live = live;
     return Content($"{Environment.MachineName} : Live={Startup.Live}");
 }

// 程序退出
[HttpGet]
public IActionResult Exit([FromServices]IHostApplicationLifetime application)
  {
      Task.Run(async () =>
      {
          await Task.Delay(3000);
          application.StopApplication();
      });
      return Content($"{Environment.MachineName} : Stopping");
  }

2. 健康检查看板

AspNetCore.Diagnostics.HealthCheck项目,开源社区项目插件文章来源地址https://www.toymoban.com/news/detail-681530.html

2.1 组件包

  • 探针检测端:AspNetCore.HealthChecks.UI
  • 应用端输出:AspNetCore.HealthChecks.UI.Client
  • 应用端检查项:AspNetCore.HealthChecks.Xxx
// startup
public void ConfigureServices(IServiceCollection services)
{
     services.AddMvc();
     services.AddHealthChecks();
     services.AddHealthChecksUI();
 }

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
       if (env.IsDevelopment())
       {
           app.UseDeveloperExceptionPage();
       }

       app.UseRouting();
       app.UseEndpoints(endpoints =>
       {
           endpoints.MapHealthChecks("/live");
           endpoints.MapHealthChecks("/ready");
           endpoints.MapHealthChecks("/hc");
           endpoints.MapMetrics();
           endpoints.MapHealthChecksUI();// 使得dashboard生效
           endpoints.MapControllers();
       });
   }

// 配置文件配置需要检查的项目
"HealthChecksUI": {
    "HealthChecks": [
      {
        "Name": "geektime-ordering-api",
        "Uri": "http://geektime-ordering-api/hc"
      },
      {
        "Name": "geektime-mobile-apiaggregator",
        "Uri": "http://geektime-mobile-apiaggregator/hc"
      },
      {
        "Name": "geektime-mobile-gateway",
        "Uri": "http://geektime-mobile-gateway/hc"
      }
    ],

到了这里,关于【微服务部署】03-健康检查的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • IIS 部署.NetCore

    https://dotnet.microsoft.com/download/dotnet/3.1/runtime Windows 安装,选择desktop apps 选择好版本后,点击去,找到Core运行时的支持:IIS runtime support,里面的Hosting Bundle(托管捆绑包)下载 设置无托管 参考地址 1、cmd输入命令,提示无法启动此程序,因为计算机中丢失 api-ms-win-crt-runtime-l

    2024年02月12日
    浏览(36)
  • NetCore_signalR服务端

    本文不介绍关于SignalR的原理内容,比如如何实现的长连接,如何实现双工通信,如何实现向下兼容的通信等等 本文仅仅记录如何实现一个服务端 IDE :visual Studio2022 环境:.net6 webApi程序 语言:C#10 没有引入其他包,因为是WebApi项目,所以默认的asp.net的包都引入了。 完整代码

    2024年02月09日
    浏览(37)
  • NetCore下WebApi的后台服务BackgroundService

    引言:最近发现个好东西就是 BackgroundService ,以前一直没注意到。个人理解它就是在你的后台开了一个子线程运行你的其他业务逻辑。 先上代码: 还需要在startup里面注册一下: 应用场景:定时提醒。

    2024年02月10日
    浏览(38)
  • nacos实现Java和.NetCore的服务注册和调用

    用nacos作为服务注册中心,如何注册.NetCore服务,如何在Java中调用.NetCore服务呢?可以分为下面几个步骤:   0.运行nacos   1.开发.net core服务,然后调用nacos提供的.net core sdk注册服务。   2.开发Java服务,然后注册服务。   3.用RestTemplate调用.net core服务。   4.用OpenFeign调用服务

    2024年01月17日
    浏览(43)
  • .NetCore gRpc 客户端与服务端的单工通信Demo

    方式一 使用vs 2022(也可以是其他版本)创建一个grpc的服务,如下这样 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uipEG9Xu-1687172462785)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20230619183828284.png)] 简单方便,创建项目后的目录结构如下图

    2024年02月09日
    浏览(53)
  • [kubernetes]服务健康检查

    进程在运行,但是不代表应用是正常的,对此pod提供的探针可用来检测容器内的应用是否正常。k8s对pod的健康状态可以通过三类探针来检查:LivenessProbe、ReadinessProbe和StartupProbe。 用于判断容器是否存活(Running状态),如果LivenessProbe探针检测到容器不健康,则kubelet“杀掉”容

    2024年02月10日
    浏览(42)
  • .NetCore调用Soap接口

    添加服务引用的方式无法满足我请求Soap接口,所以写了个Soap帮助类,使用HttpClient的方式请求接口。 提示:以下是本篇文章正文内容,下面案例可供参考 一条 SOAP 消息就是一个普通的 XML 文档,包含下列元素: 必需的 Envelope 元素,可把此 XML 文档标识为一条 SOAP 消息 可选的

    2024年02月04日
    浏览(35)
  • 杨中科 .NETCORE 异步编程

    异步点餐的优点:能同时服务 多个客人 异步点餐一定会提升 单个客户 点餐速度吗? 答案理所当然:不能 图片美化服务例子服务器能够同时服务的请求数量有限 处理完成后再回调,异步回调通知的。就可以同时处理更多的请求 传统多线程开发太麻烦。C#; async、awai

    2024年01月15日
    浏览(37)
  • netcore控制反转

    IoC Ioc优点 接口IMyservice 实现接口类 配置依赖注入在Startup.cs中 在控制器中注入依赖项

    2024年02月17日
    浏览(37)
  • netCore使用依赖注入

    依赖注入是一种常用的设计模式,用于解耦组件之间的依赖关系。通过依赖注入,我们可以将一个组件所依赖的其他组件的创建和管理工作交给容器来完成,从而实现组件之间的解耦和灵活性 .NET Core提供了内置的依赖注入容器,使我们能够轻松地实现依赖注入。下面是使用依

    2024年02月16日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包