欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何給asp.net core寫個簡單的健康檢查

 更新時間:2019年05月18日 13:13:20   作者:weihanli  
這篇文章主要給大家介紹了關(guān)于如何給asp.net core寫個簡單的健康檢查的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用asp.net core具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

Intro

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

我們的開發(fā)環(huán)境虛擬機(jī)配置有點(diǎn)低,所以有時候虛擬機(jī)會卡死。。導(dǎo)致接口無響應(yīng),有時可能有些服務(wù)啟動有問題會掛掉,所以需要一個簡單的健康檢查機(jī)制去檢查應(yīng)用的健康狀態(tài)來第一時間知道應(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ù)連接是否正常,這里只是一個示例,可以根據(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í)際效果

直接啟動訪問 "/health"

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

End

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

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

相關(guān)文章

  • 上傳圖片后使用數(shù)據(jù)庫保存圖片的示例分享

    上傳圖片后使用數(shù)據(jù)庫保存圖片的示例分享

    這篇文章主要介紹了上傳圖片后使用數(shù)據(jù)庫保存圖片的示例,需要的朋友可以參考下
    2014-03-03
  • .NET 4.5 異步IO 相關(guān)實(shí)例

    .NET 4.5 異步IO 相關(guān)實(shí)例

    本篇文章小編為大家介紹,.NET 4.5 異步IO 相關(guān)實(shí)例,需要的朋友參考下
    2013-04-04
  • 使用vs2019加.net core 對WeiApi的創(chuàng)建過程詳解

    使用vs2019加.net core 對WeiApi的創(chuàng)建過程詳解

    這篇文章主要介紹了使用vs2019加.net core 對WeiApi的創(chuàng)建,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • asp.net(c#)判斷遠(yuǎn)程圖片是否存在

    asp.net(c#)判斷遠(yuǎn)程圖片是否存在

    不錯的應(yīng)用,大家可以拓展到,判斷遠(yuǎn)程文件是否存在等功能
    2008-09-09
  • .NET CORE中使用AutoMapper進(jìn)行對象映射的方法

    .NET CORE中使用AutoMapper進(jìn)行對象映射的方法

    這篇文章主要給大家介紹了關(guān)于.NET CORE中使用AutoMapper進(jìn)行對象映射的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用.NET CORE具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 為Visual Studio2019添加Git組件

    為Visual Studio2019添加Git組件

    這篇文章介紹了為Visual Studio2019添加Git組件的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • IIS上部署你的ASP.NET?Core?Web?Api項(xiàng)目及Swagger(圖文)

    IIS上部署你的ASP.NET?Core?Web?Api項(xiàng)目及Swagger(圖文)

    本篇經(jīng)驗(yàn)將和大家介紹如何在IIS上部署ASP.NET?Core項(xiàng)目,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,希望為初學(xué).NET?CORE的童靴入門有所幫助
    2023-09-09
  • Asp.Net Core中WebSocket綁定的方法詳解

    Asp.Net Core中WebSocket綁定的方法詳解

    WebSocket 是一種在單個 TCP 連接上進(jìn)行全雙工通訊的協(xié)議,是建立在TCP上、且獨(dú)立的協(xié)議。下面這篇文章主要給大家介紹了關(guān)于Asp.Net Core中WebSocket綁定的方法,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-12-12
  • asp.net下實(shí)現(xiàn)URL重寫技術(shù)的代碼

    asp.net下實(shí)現(xiàn)URL重寫技術(shù)的代碼

    asp.net下實(shí)現(xiàn)URL重寫技術(shù)的代碼...
    2007-10-10
  • asp.NET 臟字過濾算法 修改版

    asp.NET 臟字過濾算法 修改版

    我們網(wǎng)站的臟字字典中大概有600多個詞,而且會發(fā)生變化,因此簡單的在數(shù)據(jù)新增/修改的時候做一次臟字過濾是不夠的。在網(wǎng)站從.NET 1.1到2.0改版的時候,對新版的測試發(fā)現(xiàn)舊的臟字過濾算法耗費(fèi)的時間過長,需要做一些優(yōu)化。
    2009-10-10

最新評論