欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來(lái)到入門教程網(wǎng)!

ASP.NET

當(dāng)前位置:主頁(yè) > 網(wǎng)絡(luò)編程 > ASP.NET >

如何給asp.net core寫個(gè)簡(jiǎn)單的健康檢查

來(lái)源:本站原創(chuàng)|時(shí)間:2020-01-11|欄目:ASP.NET|點(diǎn)擊: 次

Intro

健康檢查可以幫助我們知道應(yīng)用的當(dāng)前狀態(tài)是不是處于良好狀態(tài),現(xiàn)在無(wú)論是 docker 還是 k8s 還是現(xiàn)在大多數(shù)的服務(wù)注冊(cè)發(fā)現(xiàn)大多都提供了健康檢查機(jī)制來(lái)檢測(cè)應(yīng)用的健康狀態(tài),如果應(yīng)用本身就提供一個(gè)健康檢查的機(jī)制會(huì)更友好,更能真實(shí)的反映出應(yīng)用的健康狀態(tài)。

我們的開(kāi)發(fā)環(huán)境虛擬機(jī)配置有點(diǎn)低,所以有時(shí)候虛擬機(jī)會(huì)卡死。。導(dǎo)致接口無(wú)響應(yīng),有時(shí)可能有些服務(wù)啟動(dòng)有問(wèn)題會(huì)掛掉,所以需要一個(gè)簡(jiǎn)單的健康檢查機(jī)制去檢查應(yīng)用的健康狀態(tài)來(lái)第一時(shí)間知道應(yīng)用出現(xiàn)異常。

健康檢查擴(kuò)展實(shí)現(xiàn)

實(shí)現(xiàn)源碼

  public static IApplicationBuilder UseHealthCheck(this IApplicationBuilder applicationBuilder)
  {
   return UseHealthCheck(applicationBuilder, new PathString("/api/health"));
  }

  public static IApplicationBuilder UseHealthCheck(this IApplicationBuilder applicationBuilder, string path)
  {
   return UseHealthCheck(applicationBuilder, new PathString(path));
  }

  public static IApplicationBuilder UseHealthCheck(this IApplicationBuilder applicationBuilder, PathString path)
  {
   applicationBuilder.Map(path, builder => builder.Use(
    (context, next) =>
    {
     context.Response.StatusCode = 200;
     return context.Response.WriteAsync("healthy");
    }));
   return applicationBuilder;
  }

  public static IApplicationBuilder UseHealthCheck(this IApplicationBuilder applicationBuilder, string path, Func<IServiceProvider, bool> checkFunc)
  {
   return UseHealthCheck(applicationBuilder, new PathString(path), serviceProvider => Task.FromResult(checkFunc(serviceProvider)));
  }

  public static IApplicationBuilder UseHealthCheck(this IApplicationBuilder applicationBuilder, string path,
   Func<IServiceProvider, Task<bool>> checkFunc)
  {
   return UseHealthCheck(applicationBuilder, new PathString(path), checkFunc);
  }

  public static IApplicationBuilder UseHealthCheck(this IApplicationBuilder applicationBuilder, PathString path, Func<IServiceProvider, bool> checkFunc)
  {
   if (checkFunc == null)
   {
    checkFunc = serviceProvider => true;
   }
   return UseHealthCheck(applicationBuilder, path, serviceProvider => Task.FromResult(checkFunc(serviceProvider)));
  }

  public static IApplicationBuilder UseHealthCheck(this IApplicationBuilder applicationBuilder, PathString path, Func<IServiceProvider, Task<bool>> checkFunc)
  {
   if (checkFunc == null)
   {
    checkFunc = serviceProvider => Task.FromResult(true);
   }
   applicationBuilder.Map(path, builder => builder.Use(
    async (context, next) =>
    {
     try
     {
      var healthy = await checkFunc.Invoke(context.RequestServices);
      if (healthy)
      {
       context.Response.StatusCode = StatusCodes.Status200OK;
       await context.Response.WriteAsync("healthy");
      }
      else
      {
       context.Response.StatusCode = StatusCodes.Status503ServiceUnavailable;
       await context.Response.WriteAsync("unhealthy");
      }
     }
     catch (Exception ex)
     {
      context.RequestServices.GetService<ILoggerFactory>().CreateLogger("HealthCheck").Error(ex);
      context.Response.StatusCode = StatusCodes.Status503ServiceUnavailable;
      await context.Response.WriteAsync("unhealthy");
     }
    }));
   return applicationBuilder;
  }

配置健康檢查

在 Startup 里配置健康檢查,示例代碼

app.UseHealthCheck(); // 最基本的健康檢查, 默認(rèn)檢查路徑為 ""/api/health",直接返回 healthy
app.UseHealthCheck("/heath"); // 配置健康檢查的路徑為 "/health",直接返回 healthy

app.UseHealthCheck("/health", serviceProvider =>
 {
  // 檢查數(shù)據(jù)連接是否正常,這里只是一個(gè)示例,可以根據(jù)需要自定義自己的實(shí)現(xiàn)
  var configuration = serviceProvider.GetService<IConfiguration>();
  var connString = configuration.GetConnectionString("DefaultConnection");
  try
  {
   using (var conn = new SqlConnection(connString))
   {
    conn.EnsureOpen();
   }
   return true;
  }
  catch (Exception)
  {
   return false;
  }
 });

實(shí)際效果

直接啟動(dòng)訪問(wèn) "/health"

數(shù)據(jù)庫(kù)連接改為一個(gè)錯(cuò)誤的連接,修改數(shù)據(jù)庫(kù)名稱為一個(gè)不存在的數(shù)據(jù)庫(kù)

End

這個(gè)實(shí)現(xiàn)比較簡(jiǎn)單,只是實(shí)現(xiàn)一個(gè)比較簡(jiǎn)單的檢查,最初的想法比較簡(jiǎn)單只是看某個(gè)應(yīng)用是否正常工作,具體的檢查邏輯可以自定義。官方的 HealthChecks 的實(shí)現(xiàn)稍為復(fù)雜,下次單獨(dú)寫一篇文章介紹。

好了,以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)我們的支持。

上一篇:淺析.Net Core中Json配置的自動(dòng)更新

欄    目:ASP.NET

下一篇:VsCode插件開(kāi)發(fā)之插件初步通信的方法步驟

本文標(biāo)題:如何給asp.net core寫個(gè)簡(jiǎn)單的健康檢查

本文地址:http://mengdiqiu.com.cn/a1/ASP_NET/10934.html

網(wǎng)頁(yè)制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語(yǔ)言數(shù)據(jù)庫(kù)服務(wù)器

如果侵犯了您的權(quán)利,請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有