说一说spring boot服务的健康检测

一、判断服务的健康状态

服务健康与否,对我们的重要性,主要是体现在应用部署与服务调用。具体可以是如下:

  • consul/nacos 服务注册中心
  • api网关
  • docker/k8s 容器部署
  • 发版结果
  • 应用监控

服务注册中心要对外提供服务,仅限于健康的节点列表,而非所有的节点。

api网关,是一样的道理。

容器部署,比如k8s的pod,都是依据健康检测接口,判断是否Running。

二、k8s容器部署

因为我们配置了Pod的探针,由它来决定pod的状态机流转。

  • http://localhost:9015/XHDataCenter/mgm/health 返回http status如果是2xx,则说明服务启动成功。否则deployment会每隔N秒再次启动pod,直至达到阈值限制。
		  readinessProbe:
            failureThreshold: 3
            httpGet:
              path: /XHDataCenter/mgm/health
              port: 9015
              scheme: HTTP
            initialDelaySeconds: 1
            periodSeconds: 5
            successThreshold: 1
            timeoutSeconds: 3
    
          startupProbe:
            failureThreshold: 22
            httpGet:
              path: /XHDataCenter/mgm/health
              port: 9015
              scheme: HTTP
            initialDelaySeconds: 25
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 5

三、consul注册中心的服务健康

请先看我们遇到第一个问题,直接报错说404了。

但是,请留心它这里的健康检测接口地址是http://10.224.170.15:9015/XHDataCenter/mgm/health,这个地址是从哪里配置来的,很关键。

换句话说,java应用在注册到consul的时候,得告知你的服务健康地址是啥,并且把自身的健康检测endpoint暴露出去。
在这里插入图片描述

三、spring boot 程序

首先,我们程序期望的健康检测接口是http://localhost:9015/XHDataCenter/mgm/health。下面,我将把涉及到接口路径的几个地方罗列出来~

1、consul

本段配置,是告知consul, 我们的程序对外的健康检测接口是什么。 上文consul认为服务不健康的原因就是期望的地址在实际地址里不存在。

spring:
  application:
    name: data-center-service
  cloud:
    consul:
      discovery:
        enabled: true
        prefer-ip-address: true
        # consul 会依据请求该接口,判断服务是否健康
        # 期望的接口地址是http://localhost:9015/XHDataCenter/mgm/health
        health-check-path: /XHDataCenter/mgm/health

那么实际的健康检测地址是什么呢?

继续看下文。。。

2、全局的上下文路径:context-path

server:
  port: 9015
  servlet:
    # 这行会要求访问该服务的路径都额外增加下面地址
    # 期望的接口地址变成了:http://localhost:9015/XHDataCenter/${management.endpoints.web.base-path}/health
    context-path: /XHDataCenter

management.endpoints.web.base-path 的默认路径是“actuator”,所以到目前为止,本服务的健康检测地址是http://localhost:9015/XHDataCenter/actuator/health,下文我们将会对其进行重写。

3、重写actuator的路径

  • 错误的写法
management:
  endpoints:
    web:
      # 结合上一步,此时服务的健康检测地址是http://localhost:9015/XHDataCenter/XHDataCenter/mgm/health
      base-path: /XHDataCenter/mgm
      exposure:
        include: ["*"]
  • 正确的写法(按我们最早约定的,健康检测地址是http://localhost:9015/XHDataCenter/mgm/health,所以base-path重写如下)
management:
  endpoints:
    web:
      base-path: /mgm
      exposure:
        include: ["*"]

4、最终的正确写法是:

在这里插入图片描述

四、总结

经过上文对程序的修正,重启后,consul和k8s对服务的健康检测均为OK
在这里插入图片描述
点击进去,查看详情,可以看到其健康检测接口地址及检测结果。
在这里插入图片描述
K8S容器里的只要也保持该健康检测地址即可,本文就不再赘述~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天草二十六_简村人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值