如何给asp.net core写个简单的健康检查
更新时间:2019年05月18日 13:13:20 作者:weihanli
这篇文章主要给大家介绍了关于如何给asp.net core写个简单的健康检查的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用asp.net core具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
Intro
健康检查可以帮助我们知道应用的当前状态是不是处于良好状态,现在无论是 docker 还是 k8s 还是现在大多数的服务注册发现大多都提供了健康检查机制来检测应用的健康状态,如果应用本身就提供一个健康检查的机制会更友好,更能真实的反映出应用的健康状态。
我们的开发环境虚拟机配置有点低,所以有时候虚拟机会卡死。。导致接口无响应,有时可能有些服务启动有问题会挂掉,所以需要一个简单的健康检查机制去检查应用的健康状态来第一时间知道应用出现异常。
健康检查扩展实现
实现源码
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(); // 最基本的健康检查, 默认检查路径为 “”/api/health”,直接返回 healthy
app.UseHealthCheck(“/heath”); // 配置健康检查的路径为 “/health”,直接返回 healthy
app.UseHealthCheck(“/health”, serviceProvider =>
{
// 检查数据连接是否正常,这里只是一个示例,可以根据需要自定义自己的实现
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;
}
});
实际效果
直接启动访问 “/health”
数据库连接改为一个错误的连接,修改数据库名称为一个不存在的数据库
End
这个实现比较简单,只是实现一个比较简单的检查,最初的想法比较简单只是看某个应用是否正常工作,具体的检查逻辑可以自定义。官方的 HealthChecks 的实现稍为复杂,下次单独写一篇文章介绍。
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对华域联盟的支持。
您可能感兴趣的文章:详解如何在ASP.Net Core中实现健康检查
asp.net
core
健康检查
相关文章
JSON在ASP.NET中使用方法本篇将简单的介绍一个在.NET中实现JSON的API,然后使用该API做个C/S ASP.NET的小练习,需要的朋友可以参考下 2015-10-10
.NET/C#利用反射调用含ref或out参数的方法示例代码这篇文章主要给大家介绍了关于.NET/C#利用反射调用含ref或out参数的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 2018-09-09
asp.net MVC下使用rest的方法本篇文章主要介绍了asp.net MVC下使用rest的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
2017-09-09
asp.net 转换人民币大小金额转换人民币大小金额的一个通用类。 2009-09-09
asp.net BasePage类+Session通用用户登录权限控制判断用户是否登录,常用的方法就是通过Session来控制。
2010-05-05
DataGridView中CheckBox实现某一列单选DataGridView中CheckBox实现某一列单选,需要的朋友可以参考一下 2013-02-02
ASP.NET Session的七点认识小结ASP.NET Session的使用当中我们会遇到很多的问题,那么这里我们来谈下经常出现的一些常用ASP.NET Session的理解 2011-07-07
ASP.NET使用正则表达式屏蔽垃圾信息找资料,看看如何实现使用正则表达式屏蔽垃圾信息,找来找去找出来的都不怎么好,有不详细的,有代码缺失的。最后还是找到了微软,先摘过来,大概思路已经有了,只需把下面微软给的样例代码修改一下即可,具体能不能行还不知道,先睡一觉,起来再慢慢研究。 2008-09-09
图片识别工具Tesseract初探这篇文章主要介绍了图片识别工具Tesseract初探的相关资料,需要的朋友可以参考下 2015-07-07
ASP.NET Core使用GraphQL第一章之Hello World这篇文章主要给大家介绍了关于ASP.NET Core使用GraphQL第一章之Hello World的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 2018-11-11
最新评论

评论(0)