【微服务部署】03-健康检查
文章目录
- 1. 探针集成实现高可用
- 1.1 LivenessProbe
- 1.2 ReadinessProbe
- 1.3 StartupProbe
- 2. 健康检查看板
- 2.1 组件包
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项目,开源社区项目插件
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-健康检查
文章目录 1. 探针集成实现高可用1.1 LivenessProbe1.2 ReadinessProbe1.3 StartupProbe 2. 健康检查看板2.1 组件包 1. 探针集成实现高可用 LivenessReadinessStartup 1.1 LivenessProbe 判断服务是否存活结束“非存活”状态服务根据重启策略决定是否重启服务 1.2 Readines…...
SQL注入之报错注入
文章目录 报错注入是什么?报错注入获取cms账号密码成功登录 报错注入是什么? 在注入点的判断过程中,发现数据库中SQL 语句的报错信息,会显示在页面中,因此可以利用报错信息进行注入。 报错注入的原理,就是在…...
基于大数据+django+mysql的银行信用卡用户的数仓系统
系统阐述的是银行信用卡用户的数仓系统的设计与实现,对于Python、B/S结构、MySql进行了较为深入的学习与应用。主要针对系统的设计,描述,实现和分析与测试方面来表明开发的过程。开发中使用了 django框架和MySql数据库技术搭建系统的整体架构…...
【网络】多路转接——五种IO模型 | select
🐱作者:一只大喵咪1201 🐱专栏:《网络》 🔥格言:你只管努力,剩下的交给时间! 五种IO模型 | select 🍧五种IO模型🍧select🧁认识接口🧁…...
sql顺序倒序查询
要根据 orderNum 字段的顺序查询,你可以使用 SQL 的 ORDER BY 子句。默认情况下,ORDER BY 是按升序排序的,但你可以使用 DESC 关键字来指定降序排序。 以下是一个示例查询,按照 orderNum 字段的顺序将结果返回: SELEC…...
java和sql生成时间维度数据
JAVA: POM依赖: <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.4.2</version></dependency> 代码: package com.kone.kcdp.common;import cn.hutool.co…...
HUT23级训练赛
目录 A - tmn学长的字符串1 B - 帮帮神君先生 C - z学长的猫 D - 这题用来防ak E - 这题考察FFT卷积 F - 这题考察二进制 G - 这题考察高精度 H - 这题考察签到 I - 爱派克斯,启动! J - tmn学长的字符串2 K - 秋奕来买瓜 A - tmn学长的字符串1 思路&#x…...
sm4 加解密算法工具类( Java 版 )
sm4 加解密算法工具类(java) 说明:密钥是 hexString import java.security.Key; import java.security.Security; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec;import cn.hutool.core.codec.Base64Decoder; import…...
Redis项目实战——商户查询缓存
目录 为什么要用Redis实现商户查询缓存?用Redis实现商户查询缓存的基本思路?使用Redis缓存的问题及解决方法?一、如何保持数据库数据和Redis缓存数据的一致性?1 内存淘汰机制2 超时剔除机制3 主动更新机制(胜ÿ…...
重磅OpenAI发布ChatGPT企业版本
8月29日凌晨,Open AI官网发布ChatGPT企业版本! 企业版简介: ChatGPT企业版提供企业级安全和隐私、无限的高速 GPT-4 访问、用于处理更长输入的更长上下文窗口、高级数据分析功能、自定义选项等等。人工智能可以协助和提升我们工作生活的各个…...
# Go学习-Day7
文章目录 断言文件打开/关闭文件读取文件写入文件 命令行参数解析Argsflag包 JSON 个人博客:CSDN博客 断言 type Node struct {x inty int }func main() {var a interface{}var n Node Node{1, 2}a nvar b Nodeb a.(Node)fmt.Println(b) }此处我们有一个结构体…...
uniapp-form表单
<template><view class"ptb-20 plr-30 bg min100"><view class"bg-white radius-20 pd-30"><view class"bold mt-30 mb-50 size-32">选择方式:</view><u--form labelPosition"left" :mod…...
漏洞挖掘-利用
一、文章简介 整合一些web漏洞,以及对漏洞的理解。 二、Web漏洞 1.SQL注入 (1)定义 开发者程序编写过程中,对传入用户数据过滤不严格,将可能存在的攻击载荷拼接到SQL查询语句当中,再将这些查询语句传递到…...
React钩子函数之useDeferredValue的基本使用
在React中,使用钩子函数可以方便地管理组件的状态和副作用。useDeferredValue是React 18中新引入的钩子函数之一,它可以帮助我们优化渲染性能,让组件更加流畅。 useDeferredValue的作用是将一个值延迟更新。这个值可以是状态、属性或其他变量…...
lodash常用方法
cloneDeep 克隆 import { cloneDeep,reduce } from lodash; const b {c:1} const a cloneDeep(b)debounce 防抖 import { debounce } from lodash; debounce(() > {}, 300, { trailing: true })()omit方法删除指定属性,返回一个新的对象 import …...
QByteArray与结构体之间相互转换
Qt项目会碰到自定义结构体和字符数组之间的转换问题,不妨假设结构体名字为custom_struct, 字符数组名字为array_data QByteArray转换为自定义结构体 custom_struct *struct_data reinterpret_cast<custom_struct *>(array_data.data());自定义结构体转换为…...
npm如何安装淘宝镜像
通过命令配置 这种方法是通过修改npm的全局配置文件,将默认的镜像源改为淘宝镜像。具体步骤如下: 打开终端,输入以下命令,设置淘宝镜像源:(windowr) npm config set registry https://registr…...
从项目中突显技能:在面试中讲述你的编程故事
🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…...
python的观察者模式案例
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言二、具体代码写在结尾 前言 最近写安卓的代码比较多,了解了java代码的注册回调机制,也就是观察者模式,搜索了一下python也有…...
C语言——类型转换
数据有不同的类型,不同类型数据之间进行混合运算时涉及到类型的转换问题。 转换的方法有两种: 自动转换(隐式转换):遵循一定的规则,由编译系统自动完成强制类型转换:把表达式的运算结果强制转换成所需的数据类型 语法格…...
从碎片到全景:基于RDP缓存文件(*.bmc)的自动化取证与图像重构实践
1. 揭开RDP缓存文件的神秘面纱 第一次接触*.bmc文件时,我完全没意识到这些看似普通的缓存文件里藏着这么多秘密。当时正在处理一个内部安全审计项目,需要确认某位离职员工是否通过远程桌面泄露了公司数据。在翻遍常规日志无果后,同事提醒我检…...
3步搞定专业电路图绘制:Draw.io ECE插件让电子工程设计变得简单高效
3步搞定专业电路图绘制:Draw.io ECE插件让电子工程设计变得简单高效 【免费下载链接】Draw-io-ECE Custom-made draw.io-shapes - in the form of an importable library - for drawing circuits and conceptual drawings in draw.io. 项目地址: https://gitcode.…...
知识管理革命:OpenClaw+ollama-QwQ-32B构建个人第二大脑
知识管理革命:OpenClawollama-QwQ-32B构建个人第二大脑 1. 为什么我们需要"第二大脑"? 作为一个长期被信息过载困扰的技术写作者,我每天要处理几十篇技术文档、研究论文和行业动态。最痛苦的不是获取信息,而是如何有效…...
GLM-OCR .NET平台集成指南:C#调用与桌面应用开发
GLM-OCR .NET平台集成指南:C#调用与桌面应用开发 如果你是一名.NET开发者,正在琢磨怎么给你的桌面应用或者Web项目加上一个“眼睛”,让它能看懂图片里的文字,那这篇文章就是为你准备的。OCR(光学字符识别)…...
Bilibili视频下载终极指南:如何免费高效保存B站精彩内容
Bilibili视频下载终极指南:如何免费高效保存B站精彩内容 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors…...
毕业设计实战:基于SpringBoot的网购平台管理系统设计与实现全攻略
毕业设计实战:基于SpringBoot的网购平台管理系统设计与实现全攻略 在开发“基于SpringBoot的网购平台管理系统”毕业设计时,曾因“订单状态与库存管理脱节”踩过关键坑——初期未设计清晰的订单状态机和库存联动机制,导致用户下单后库存未及时…...
别再拍脑袋定A/B测试样本量了!用Python/Excel/R三分钟算出靠谱结果
别再拍脑袋定A/B测试样本量了!用Python/Excel/R三分钟算出靠谱结果 每次启动A/B测试前,团队总会陷入同样的争论:"这次实验需要多少流量才够?"产品经理凭经验说"10万用户应该够了",运营同学翻出上次…...
别再死磕Release了!用Debug模式打包Qt exe,一次搞定所有dll依赖(附GPT脚本生成技巧)
用Debug模式打包Qt应用:绕过Release陷阱的高效解决方案 当Qt开发者第一次尝试将项目打包成可独立运行的exe文件时,绝大多数教程都会推荐使用Release模式编译。然而在实际操作中,Release模式可能会带来一系列难以排查的问题——从莫名其妙的崩…...
Umi-OCR:免费开源OCR工具的高效解决方案与全方位指南
Umi-OCR:免费开源OCR工具的高效解决方案与全方位指南 【免费下载链接】Umi-OCR Umi-OCR: 这是一个免费、开源、可批量处理的离线OCR软件,适用于Windows系统,支持截图OCR、批量OCR、二维码识别等功能。 项目地址: https://gitcode.com/GitHu…...
松江少儿英语口碑好的?
松江少儿英语口碑好的 环球乐学少儿英语,指出幼儿英语学习三大痛点: 1. 兴趣不足易抵触:教学形式枯燥,多以机械记单词、跟读为主,不符合幼儿认知特点,易产生厌学情绪。 2. 缺语境不会运用:…...
