【微服务部署】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日
    浏览(38)
  • NetCore下WebApi的后台服务BackgroundService

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

    2024年02月10日
    浏览(39)
  • 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日
    浏览(44)
  • .NetCore gRpc 客户端与服务端的单工通信Demo

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

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

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

    2024年02月10日
    浏览(45)
  • 【NetCore】09-中间件

    1.1 中间件工作原理 1.2 中间件核心对象 IApplicationBuilder RequestDelegate IApplicationBuilder可以通过委托方式注册中间件,委托的入参也是委托,这就可以将这些委托注册成一个链,如上图所示;最终会调用Builder方法返回一个委托,这个委托就是把所有的中间件串起来后合并成的一个

    2024年02月12日
    浏览(49)
  • netcore模型配置

    模型配置可以通过Fluent API和注解的方式 FluentAPI步骤 新建Products 和Category类 新建Products类 Products     新建Category类 Category 他们之间存在一对多的关系 配置实体属性 Fluent API  配置一对一的关系 一对一关系表示两个实体存在唯一的关系,每个实体只能关联到另一个实体 新建

    2024年02月16日
    浏览(38)
  • .netcore基础知识(一)

    Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 先来说说web服务器 先来一张图 一个典型的进程外托管模型 我们先看kestrel这一部分 我们在它前面放了一个方向代理服务器nginx 对http请求做预处理 kestrel本

    2024年02月09日
    浏览(35)
  • 杨中科 .NETCORE NuGet

    Zack.EFCore.Batch 使用这个开发包Entity Framework Core用户可以使用LINQ语句删除或者更新多条数据库记录,操作只执行一条SQL语句并且不需要首先把实体对象加载到内存中。这个开发包支持Entity Framework Core 5.0以及更高版。 操作说明: 第一步 https://www.nuget.org 精准搜索 合适与不知道什

    2024年01月20日
    浏览(39)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包