在.NET Core 中实现健康检查

.NET Core中提供了开箱即用的运行状况检查,首先,我将在.NET Core API应用程序中执行运行状况检查,接下来,我们将使用DbContext集成SQL Server或数据库的运行状况检查,最后是如何实现自定义服务的运行状况检查。

在ASP.NET Core中实现健康检查

要实现运行状况检查,您需要在项目中安装 Microsoft.AspNetCore.Diagnostics.HealthChecks 。

接下来,在ConfigureServices方法中添加运行状况检查中间件。

public void ConfigureServices(IServiceCollection services)
{services.AddHealthChecks();services.AddControllers();
}

然后修改Configure方法,使用中间件:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{ app.UseEndpoints(endpoints =>{endpoints.MapControllers();endpoints.MapHealthChecks("/health");});
}

现在,准备工作完成,运行程序然后访问 /health, 您将看到下边结果:

HealthCheckService

.NET Core提供了一个HealthCheckService类,我们可以把健康检查的放到我们的控制器中,就像这样:

public class HealthController : ControllerBase
{private readonly ILogger<HealthController> _logger;private readonly HealthCheckService _healthCheckService;public HealthController(ILogger<HealthController> logger,HealthCheckService healthCheckService){_healthCheckService = healthCheckService;_logger = logger;}[HttpGet]public async Task<IActionResult> Get(){var report = await _healthCheckService.CheckHealthAsync();return report.Status == HealthStatus.Healthy ? Ok(report) :StatusCode((int)HttpStatusCode.ServiceUnavailable, report);}
}

现在,如果您尝试访问/health,您将看到相同的结果。

接下来,我们将实现数据库运行状态检查:

EntityFramework Core 健康检查

首先,还是需要安装Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore到我们的项目中。

接下来,我们拿到数据库上下文,然后修改代码:

public void ConfigureServices(IServiceCollection services)
{services.AddControllers();services.AddApiVersioning();
}

然后,运行程序,现在访问 /health 返回的结果是这样:

IHealthCheck

一些情况下,默认的健康检查可能不满足我们的需求,那么可以继承 IHealthCheck 接口,自定义我们的健康检查的逻辑。

public class ApiHealthCheck : IHealthCheck
{private readonly IHttpClientFactory _httpClientFactory;public ApiHealthCheck(IHttpClientFactory httpClientFactory){_httpClientFactory = httpClientFactory;}public async Task<HealthCheckResult> CheckHealthAsync(HealthCheckContext context,CancellationToken cancellationToken = default){using (var httpClient = _httpClientFactory.CreateClient()){var response = await httpClient.GetAsync("https://your-api-service.endpoint");if (response.IsSuccessStatusCode){return HealthCheckResult.Healthy($"API is running.");}return HealthCheckResult.Unhealthy("API is not running");}}
}

然后修改代码如下:

public void ConfigureServices(IServiceCollection services)
{services.AddHealthChecks().AddDbContextCheck<WeatherForecastDbContext>().AddCheck<ApiHealthCheck>("ApiHealth");services.AddControllers();
}

然后,运行程序,访问 /health,结果如下:

原文作者: Anuraj 原文链接: https://dotnetthoughts.net/implementing-health-check-aspnetcore/[1]

最后

欢迎扫码关注我们的公众号 【全球技术精选】,专注国外优秀博客的翻译和开源项目分享,也可以添加QQ群 897216102

References

[1] https://dotnetthoughts.net/implementing-health-check-aspnetcore/: "https://dotnetthoughts.net/implementing-health-check-aspnetcore/"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305485.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python3.7安装keras教程_Python3.7安装keras和TensorFlow的教程图解

win10 Python3.7安装keras深度学习集成包 TensorFlow 和Ubuntu下安装keras 在win10下安装 安装时必须检查你的python是否为64位&#xff0c;32位不支持&#xff01;&#xff01;&#xff01; 32 位卸载下载其中的64位在python官网 然后在 pip install --upgrade tensorflow 如果…

(1)学习数组,集合,IEnumerable接口,引申学习迭代器

发展:数组-->集合-->泛型 (1)数组 1. 数组数据结构是System.Array类的一个实例. 2. System.Array类的语法为 [SerializableAttribute] [ComVisibleAttribute(true)] public abstract class Array : ICloneable, IList, ICollection, IEnumerable 3. 下面看一个使用数组…

华为交换机初始化_华为交换机恢复出厂设置

华为交换机恢复出厂设置(2008-10-06 22:29:54)在设备重启时按CtrlB进入BOOT MENU之后&#xff0c;Press Ctrl-B to enter Boot Menu... 5Password :缺省为空&#xff0c;回车即可1. Download application file to flash2. Select application file to boot3. Display all files…

领域驱动设计-从贫血模型到充血模型

背景领域模型对象只是用来存储应用的数据。业务逻辑位于服务层中&#xff0c;管理域对象的数据。在服务层中&#xff0c;应用的每个实体对应一个服务类。这种模式大家是不是很熟悉&#xff0c;尤其是在中小项目或者项目刚启动的时候&#xff0c;都是怎么方便怎么来&#xff1b;…

python离群点检测_如何从熊猫DataFrame中检测峰点(离群值)

我有一个带有多个速度值的熊猫数据帧&#xff0c;这些速度值是连续移动的值&#xff0c;但它是一个传感器数据&#xff0c;因此我们经常在中间出现误差的情况下&#xff0c;移动平均值似乎也无济于事&#xff0c;所以我可以采用什么方法用于从数据中删除这些离群值或峰点&#…

普通故障处理流程

一般OA或者BOSS的用户报故障后流程如下。、从中心机房扫描微波如果基站端能扫描到&#xff0c;但是客户端无法扫描。基本可以排除 基站端设备正常&#xff08;除天线外&#xff09;。问题一般出在客户那里&#xff0c;比如客户端微波数据丢失&#xff0c;停电。天线问题&#x…

普通用户nginx访问不了_Nginx降权启动之使用普通用户管理 | it运维_it技术_linux运维-追梦人博客...

一、介绍1.1、什么是nginx降权启动降权启动&#xff1a;即nginx的启动与管理使用非root用户来启动与管理&#xff0c;这样就防止每次修改配置重启时都需要用root用户来重启了。注意&#xff1a;普通用户只能只用1024以上的端口&#xff0c;不可以直接使用80或者443端口(前面可以…

读书 | IT人如何直击本质洞察底层逻辑?

【好书共读】| 作者/Edison Zhou作为IT技术人&#xff0c;我们不仅要精进技术&#xff0c;也要在技术之外修炼自己的软能力。本质思考&#xff0c;是一种直击事物本质的能力&#xff0c;是思考“思考的方法”&#xff0c;是一切思考的原动力。我们不用担心这个能力在其他企业用…

编译AjaxControlToolkit发生错误如何解决?

错误的具体内容是&#xff1a;Error 1 Could not load file or assembly vjslib, Version2.0.0.0, Cultureneutral, PublicKeyTokenb03f5f7f11d50a3a or one of its dependencies. TemplateVSI\TemplateVSI.csproj 未能加载文件或程序集“vjslib, Version2.0.0.0, Cultureneut…

内网通mac能用吗_纯干货!小容量Mac装外置硬盘Windows系统最完美的方案!(多图)...

很多用Mac 的同学都会碰到一个很头疼的问题&#xff0c;那就是对 Windows系统的需求&#xff0c;macOS系统虽好&#xff0c;但是很多专业性软件都没有Mac 版本(特别是对国内的用户)&#xff0c;这时大家就会对 Windows系统有需求了。这时候很多同学会想到使用虚拟机或者装 Boot…

卖shell看站什么意思_粤语俚语卖咸鸭蛋是什么意思?

点读&#xff1a;卖咸鸭蛋&#xff08;maai6 haam4 aap3 daan6&#xff09;点解&#xff1a;就是死了的意思点造句&#xff1a;粤&#xff1a;您搵丧彪啊&#xff0c;佢琴日去劈友唔小心赖咗嘢&#xff0c;宜家已经去咗卖咸鸭蛋啦~~普&#xff1a;你找丧彪吗&#xff0c;他昨天…

asp.net core安全事项(上)

隐藏web服务端信息创建一个asp.net core mcv web项目&#xff0c;运行&#xff0c;F12查看返回信息&#xff0c;如下图&#xff0c;会清晰看到服务端的类型是kestrel.有时安全检测要求不能显示服务端信息&#xff0c;这样在一定程度上能降低被 攻击的风险&#xff0c;具体代码如…

云水画中人,独立一江秋

转载于:https://blog.51cto.com/wuliguo/50014

python是c语言_python与c语言

广告关闭 腾讯云11.11云上盛惠 &#xff0c;精选热门产品助力上云&#xff0c;云服务器首年88元起&#xff0c;买的越多返的越多&#xff0c;最高返5000元&#xff01; python语言调用c语言进行扩展&#xff0c;或者增加程序的运行速度都是特别方便的。 同时还能获得与c或者c几…

aes算法实现c语言_以C语言实现归并排序为例,谈谈五大常用算法之一的“分治法”...

分治算法&#xff0c;顾名思义就是“分而治之”&#xff0c;即把规模较大的复杂问题拆分为若干规模较小的类似子问题&#xff0c;并逐个解决&#xff0c;最后再将各个子问题的解决结果合并&#xff0c;得到原始问题的结果的方法。这个技巧是很多高效算法的基础&#xff0c;例如…

一朝读码深似海,不读源码薪难升!读懂.NET5源码,到底多重要?

谈到源码分析&#xff0c;很多人会有这样的疑问&#xff1a;“.NET5的基本功能我已经掌握了&#xff0c;还有读源码的必要吗&#xff1f;”实际上&#xff0c;阅读源码不仅能够帮你更深刻地理解底层设计原理&#xff0c;提升你的系统架构能力和编码功力&#xff0c;还能让你知道…

使用SQL语句获取SQL Server数据库登录用户权限

返回一个报表&#xff0c;报表中包含当前数据库中某对象的用户权限或语句权限的信息。语法sp_helprotect [ [ name ] object_statement ][ , [ username ] security_account ][ , [ grantorname ] grantor ][ , [ permissionarea ] type ]参数[name ] object_statement是当…

如何在 ASP.Net Core 使用 分布式缓存

ASP.Net Core 提供了多种类型的缓存&#xff0c;除了内存缓存和响应缓存之外&#xff0c;还提供了对 分布式缓存 的支持。在之前的一篇文章中&#xff0c;我讨论了 ASP.Net Core 的内存缓存。在本文中&#xff0c;我们将讨论如何在 ASP.Net Core 中使用分布式缓存&#xff0c;本…

50万数据生成6位数不重复字符串_R语言系列3:高级数据管理

R语言系列3&#xff1a;高级数据管理此文内容为《R语言实战》的笔记&#xff0c;人民邮电出版社出版。从高中电脑课学VB开始&#xff0c;大一课内开始学习C&#xff0c;到后来大二为了数模学习Matlab&#xff0c;到大三为了搞深度学习自学Python&#xff0c;到研究生之初学习St…

ぁ。。。爱。。。ぁ

有一老夫妻年逾50.经济条件不错&#xff0c;理当是安享退休的时候&#xff0c;却一起到律师那要办离婚。原因是自从结婚以来&#xff0c;两人争吵不断&#xff0c;老是意见不合。个性上又南辕北辙十分不和谐。二十多年的婚姻生活&#xff0c;要不是为了孩子着想&#xff0c;早就…