【Springboot知识】开发属于自己的中间件健康监测HealthIndicate

文章目录

      • **一、技术栈**
      • **二、项目结构**
      • **三、依赖配置 (pom.xml)**
      • **四、配置文件 (application.yml)**
      • **五、自定义健康检查实现**
        • **1. Redis健康检查**
        • **2. Elasticsearch健康检查**
        • **3. Kafka健康检查**
        • **4. MySQL健康检查**
      • **六、自定义健康检查接口 (可选)**
      • **七、测试与验证**
      • **八、高级功能扩展**
      • **九、部署建议**
      • **十、常见问题排查**
    • 相关文献

以下是一个基于Spring Boot和Spring Boot Actuator实现的 中间件健康监测端的详细方案,支持Redis、Elasticsearch、Kafka、MySQL等常见中间件的健康检查,包含代码示例和配置说明。

一、技术栈

后端框架: Spring Boot 3.x
健康检查: Spring Boot Actuator
中间件驱动:
• Redis: spring-boot-starter-data-redis
• Elasticsearch: spring-boot-starter-data-elasticsearch-rest
• Kafka: spring-boot-starter-kafka
• MySQL: spring-boot-starter-data-jpa
可视化: Actuator自带的/health端点 + 自定义JSON格式

二、项目结构

src/main/java
├── com.example.healthmonitor
│   ├── HealthMonitorApplication.java          # 主程序
│   ├── config
│   │   ├── RedisConfig.java                 # Redis配置
│   │   ├── ElasticsearchConfig.java        # Elasticsearch配置
│   │   ├── KafkaConfig.java                  # Kafka配置
│   │   └── MysqlConfig.java                  # MySQL配置
│   ├── health
│   │   ├── RedisHealthIndicator.java        # Redis健康检查
│   │   ├── ElasticsearchHealthIndicator.java # Elasticsearch健康检查
│   │   ├── KafkaHealthIndicator.java        # Kafka健康检查
│   │   └── MysqlHealthIndicator.java         # MySQL健康检查
│   └── controller
│       └── HealthController.java              # 自定义健康检查接口

三、依赖配置 (pom.xml)

<dependencies><!-- Spring Boot Actuator --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!-- Redis --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!-- Elasticsearch --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch-rest</artifactId></dependency><!-- Kafka --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-kafka</artifactId></dependency><!-- MySQL --><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><scope>runtime</scope></dependency><!-- Lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency>
</dependencies>

四、配置文件 (application.yml)

# Actuator配置
management:endpoints:web:exposure:include: "health,metrics" # 暴露健康检查和指标端点health:show-details: ALWAYS # 显示详细健康信息metrics:export:prometheus:enabled: false # 关闭Prometheus导出(按需启用)# Redis配置
spring:redis:host: localhostport: 6379password: your_redis_password# Elasticsearch配置
spring:elasticsearch:rest:uris: http://localhost:9200indices:refresh-interval: 10s# Kafka配置
spring:kafka:bootstrap-servers: localhost:9092consumer:group-id: health-monitorauto-offset-reset: earliest# MySQL配置(测试用H2数据库)
spring:datasource:url: jdbc:h2:mem:testdbusername: sapassword:driver-class-name: org.h2.Driverh2:console:enabled: truepath: /h2-console

五、自定义健康检查实现

1. Redis健康检查
@Component
public class RedisHealthIndicator implements HealthIndicator {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;@Overridepublic Health health() {try {// 执行PING命令测试连接redisTemplate.execute((RedisCallback<Object>) connection -> connection.ping());return Health.up().withDetail("status", "PONG").build();} catch (Exception e) {return Health.down(e).withDetail("error", e.getMessage()).build();}}
}
2. Elasticsearch健康检查
@Component
public class ElasticsearchHealthIndicator implements HealthIndicator {@Autowiredprivate RestHighLevelClient elasticsearchClient;@Overridepublic Health health() {try {// 执行简单查询测试索引SearchRequest searchRequest = new SearchRequest("indices");searchRequest.types("*");searchRequest.source(new SearchSourceBuilder());elasticsearchClient.search(searchRequest, RequestOptions.DEFAULT);return Health.up().withDetail("status", "OK").build();} catch (Exception e) {return Health.down(e).withDetail("error", e.getMessage()).build();}}
}
3. Kafka健康检查
@Component
public class KafkaHealthIndicator implements HealthIndicator {@Autowiredprivate KafkaTemplate<String, String> kafkaTemplate;@Overridepublic Health health() {try {// 发送测试消息并消费验证kafkaTemplate.send("test-topic", "health-check");ListenableFuture<ConsumerRecord<String, String>> future = kafkaTemplate.receive("test-topic");future.get(5, TimeUnit.SECONDS); // 5秒内未收到视为失败return Health.up().withDetail("status", "MESSAGE_RECEIVED").build();} catch (Exception e) {return Health.down(e).withDetail("error", e.getMessage()).build();}}
}
4. MySQL健康检查
@Component
public class MysqlHealthIndicator implements HealthIndicator {@Autowiredprivate JdbcTemplate jdbcTemplate;@Overridepublic Health health() {try {// 执行简单查询测试连接jdbcTemplate.queryForObject("SELECT 1", Integer.class);return Health.up().withDetail("status", "QUERY_SUCCESS").build();} catch (Exception e) {return Health.down(e).withDetail("error", e.getMessage()).build();}}
}

六、自定义健康检查接口 (可选)

如果需要扩展自定义接口,可通过@RestController实现:

@RestController
@RequestMapping("/api/health")
public class HealthController {@Autowiredprivate HealthCheckService healthCheckService;@GetMapping("/all")public Map<String, Health> getAllHealth() {return healthCheckService.getHealthStatus();}
}

七、测试与验证

  1. 启动中间件服务
    • Redis: redis-server
    • Elasticsearch: elasticsearch
    • Kafka: kafka-server-start.sh
    • MySQL/H2: 已通过配置文件集成

  2. 访问健康检查端点
    • Actuator默认端点: http://localhost:8080/actuator/health
    • 自定义接口(可选): http://localhost:8080/api/health/all

  3. 预期输出示例

    {"status": "UP","components": {"redis": {"status": "UP","details": {"status": "PONG"}},"elasticsearch": {"status": "UP","details": {"status": "OK"}},// ...其他中间件状态}
    }
    

八、高级功能扩展

  1. 健康检查频率控制

    management:health:check-interval: 30s # 设置健康检查间隔
    
  2. 自定义健康状态码

    return Health.up().withCode("CUSTOM_STATUS").withDetail("message", "Service is healthy").build();
    
  3. 集成Prometheus/Grafana

    management:metrics:export:prometheus:enabled: trueendpoint: "/actuator/metrics"
    
  4. 邮件/短信报警
    通过实现ApplicationListener<HealthCheckFailedEvent>监听健康检查失败事件。

九、部署建议

  1. Docker化部署

    FROM openjdk:17-jdk-slim
    COPY target/health-monitor-0.0.1-SNAPSHOT.jar app.jar
    ENTRYPOINT ["java", "-jar", "app.jar"]
    
  2. Kubernetes监控
    结合Liveness/Readiness探针:

    apiVersion: apps/v1
    kind: Deployment
    metadata:name: health-monitor
    spec:template:spec:containers:- name: health-monitorimage: your-imagelivenessProbe:httpGet:path: /actuator/healthport: 8080initialDelaySeconds: 30periodSeconds: 10
    

十、常见问题排查

  1. 连接超时
    • 检查中间件服务地址和端口。
    • 调整连接超时配置(如Redis的connectTimeout)。

  2. 认证失败
    • 确保配置文件中的用户名和密码正确。
    • 对于Elasticsearch,可能需要禁用SSL或配置CA证书。

  3. 版本兼容性
    • 确认Spring Boot版本与中间件客户端版本兼容(如Elasticsearch 7.x+需要rest-high-client)。

通过以上方案,可以快速构建一个功能完善的中间件健康监测系统,实时监控服务依赖的稳定性。根据实际需求,可进一步扩展告警机制和可视化面板。

相关文献

【Springboot知识】springboot的Health Indicator介绍
【Springboot知识】Springboot进阶-Actuator深入理解

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

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

相关文章

基于Python+SQLite实现(Web)验室设备管理系统

实验室设备管理系统 应用背景 为方便实验室进行设备管理&#xff0c;某大学拟开发实验室设备管理系统 来管理所有实验室里的各种设备。系统可实现管理员登录&#xff0c;查看现有的所有设备&#xff0c; 增加设备等功能。 开发环境 Mac OSPyCharm IDEPython3Flask&#xff…

让双向链表不在云里雾里

又来博客留下我的足迹了&#xff0c;哈哈哈&#xff0c;这次是对于双向链表的理解 目录 创建双向链表&#xff1a; 申请结点&#xff1a; 双向链表初始化&#xff1a; 双向链表插入结点&#xff1a; 双向链表删除结点&#xff1a; 双向链表的打印&#xff1a; 双向链表…

基于SpringBoot的Mybatis和纯MyBatis项目搭建的区别

【由于之前学习MyBatis的时候是跟着视频敲的纯MyBatis项目&#xff0c;以至于在突然看到别人在SpringBoot项目里搭建MyBatis方式的时候很懵比…特此文字形式记录一下区别&#xff08;应该还有好多种其他方式是我不知道的&#xff0c;主要应该就是要知道关键的流程步骤&#xff…

UE4-UE5虚幻引擎,前置学习一--Console日志输出经常崩溃,有什么好的解决办法

有些差异 这么牛逼的引擎&#xff0c;居然有这种入门级别的问题&#xff0c;一触发清理&#xff0c;大概率(80%)会崩溃 无论虚幻5还是UE4都有这个问题&#xff0c;挺烦人的 实在忍不了了&#xff0c;这次&#xff0c;今天 就想问问有什么好的处理方法么&#xff1f;&#x…

学习 springboot -Bean 管理(注册条件)

前言 上一篇 博客 :学习springboot-Bean管理&#xff08;Bean 注册&#xff0c;Bean 扫描&#xff09;-CSDN博客我们了解了 bean 注册需要使用到 Bean 和Import 将第三方jar 包的对象 注入到ioc 容器 如下图所示 通过图片&#xff0c;可以看到Country 对象和Province 对象已…

【云原生技术】编排与容器的技术演进之路

一、编排与容器的技术演进之路 1.1 DockerClient 此时 K8s 只是编排领域的一个选择&#xff0c;而 Docker 此时一家独大&#xff0c;所以 K8s 的客户端只 是作为 Docker 的客户端来调用 Docker 引擎来完成服务。 1.2 RUNC&Shim OCI催生 runcrunc&#xff0c;剥离 Docke…

安卓投屏到mac操作

1. 安装 brew install scrcpy2. 打开手机usb调试 3. 安装 brew install android-platform-tools 4. 重启终端&#xff0c;运行命令 adb devices scrcpy 参考&#xff1a;https://zhuanlan.zhihu.com/p/682491037https://zhuanlan.zhihu.com/p/682491037

c#知识点补充

1.静态类无法被继承 2.线程join方法的使用 作用就是让多个线程&#xff0c;按顺序执行 3.线程里lock的作用 保证每次只执行一次 4.线程池的使用

3分钟复现 Manus 超强开源项目 OpenManus

文章目录 前言什么是 OpenManus构建方式环境准备克隆代码仓库安装依赖配置 LLM API运行 OpenManus 效果演示总结个人简介 前言 近期人工智能领域迎来了一位备受瞩目的新星——Manus。Manus 能够独立执行复杂的现实任务&#xff0c;无需人工干预。由于限制原因大部分人无法体验…

电路原理(电容 集成电路NE555)

电容 1.特性&#xff1a;充放电&#xff0c;隔直流&#xff0c;通交流 2.电容是通过聚集正负电荷来存储电能的 3.电容充放电过程可等效为导通回路 4.多电容并联可以把容量叠加&#xff0c;但是多电容串联就不会&#xff0c;只会叠加电容的耐压值。 6.电容充放电时相当于通路&a…

【redis】hash基本命令和内部编码

文章目录 表示形式命令HSET 和 HGET HEXISTSHDELHKEYSHVALSHGETALLHMGETHLENHSETNXHINCRBYHINCRBYFLOAT命令小结内部编码 表示形式 Redis 自身已经是键值对结构了 Redis 自身的键值对就是通过哈希的方式来组织的 把 key 这一层组织完成之后&#xff0c;到了 value 这一层&…

学习路之TP6 --重写vendor目录下的文件(新建命令)

[TOC](学习路之TP6 --重写vendor目录下的文件(新建命令)) 一、新建命令文件 php think make:command CustomWorker二、修改 复制vendor\topthink\think-worker\src\command\Server.php 内容到app\command\CustomWorker.php 修改继承类&#xff1a;class CustomWorker exten…

Python----数据可视化(Pyecharts三:绘图二:涟漪散点图,K线图,漏斗图,雷达图,词云图,地图,柱状图折线图组合,时间线轮廓图)

1、涟漪特效散点图 from pyecharts.globals import SymbolType from pyecharts.charts import EffectScatter from pyecharts.faker import Faker from pyecharts import options as opts from pyecharts.globals import ThemeType # 绘制图表 es (EffectScatter(init_optsop…

Linux内核网络层分析

网络访问层仍受到传输介质的性质以及相关适配器的设备驱动程序的影响很大。网络层与网络适配器的硬件性质几乎完全分离。为什么说几乎&#xff1f;因为该层不仅负责发送和接收数据&#xff0c;还负责在彼此不直接连接的系统之间转发和路由分组。查找最佳路由并选择适当的网络设…

OpenHarmony子系统开发 - Rust编译构建指导

OpenHarmony子系统开发 - Rust编译构建指导 一、Rust模块配置规则和指导 概述 Rust是一门静态强类型语言&#xff0c;具有更安全的内存管理、更好的运行性能、原生支持多线程开发等优势。Rust官方也使用Cargo工具来专门为Rust代码创建工程和构建编译。 OpenHarmony为了集成C…

分享一个免费的CKA认证学习资料

关于CKA考试 CKA&#xff08;Certified Kubernetes Administrator&#xff09;是CNCF基金会&#xff08;Cloud Native Computing Foundation&#xff09;官方推出的Kubernetes管理员认证计划&#xff0c;用于证明持有人有履行Kubernetes管理的知识&#xff0c;技能等相关的能力…

MySQL的一些八股文

1.什么是BufferPool&#xff1f; Buffer Pool基本概念 Buffer Pool&#xff1a;缓冲池&#xff0c;简称BP。其作用是用来缓存表数据与索引数据&#xff0c;减少磁盘IO操作&#xff0c;提升效率。 Buffer Pool由缓存数据页(Page) 和 对缓存数据页进行描述的控制块 组成, 控制…

卷积神经网络(笔记02)

一、简述在卷积神经网络中池化层的作用&#xff0c;并解释其为何能帮助提高模型性能 。 池化层的作用 1. 降低数据维度 池化操作通过对输入特征图进行下采样&#xff0c;减少特征图的空间尺寸。常见的池化方式有最大池化&#xff08;Max Pooling&#xff09;和平均池化&…

面试系列|蚂蚁金服技术面【1】

哈喽&#xff0c;大家好&#xff01;今天分享一下蚂蚁金服的 Java 后端开发岗位真实社招面经&#xff0c;复盘面试过程中踩过的坑&#xff0c;整理面试过程中提到的知识点&#xff0c;希望能给正在准备面试的你一些参考和启发&#xff0c;希望对你有帮助&#xff0c;愿你能够获…

带环链表的相关知识点

带环链表的相关知识点 1.判断是否有环2.寻找入环节点补充&#xff1a;相交链表 如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&#xff08;索引从 0 开…