在上篇文章中,讲解了 Spring Cloud 服务使用 Spring Boot Admin 监控的搭建,但是我在做公司的传统项目改造成微服务架构的过程中,在搭建 Spring Boot Admin 的时候,遇到了一个坑,有个服务配置了 context-path 这个属性,导致 Spring Boot Admin 一直获取不到这个服务的端点信息(当时我对 Spring Boot Admin 的使用、原理还不熟悉),现在通过 Spring Boot Admin 的部分源码分析来看看怎么解决这个问题,记录一下我踩到的坑。
(一)首先,我们看下服务配置了 context-path 属性后,不做其他配置,Spring Boot Admin 是什么样子。
拿之前文章里写的服务 spring-demo-service-feign 做例子
修改 spring-demo-service-feign 的配置文件,添加 context-path 的配置如下:
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
server:
port: 8382
servlet:
context-path: /gateway
spring:
application:
name: spring-demo-service-feign
feign:
hystrix:
enabled: true
# Ribbon 的负载均衡策略
spring-demo-service:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.BestAvailableRule
management:
endpoints:
web:
exposure:
include: '*'
endpoint:
health:
show-details: ALWAYS
info:
version: 1.0.0
其他的不用配置,以此启动 eureka server、spring-demo-service、spring-demo-service-feign、springboot-admin 服务
访问 http://localhost:8788/,登录后
可以看到,spring-demo-service-feign 的服务是 DOWN 的状态,点击 spring-demo-service-feign 查看
什么信息都没有,这让我很纳闷,当时不知道是 context-path 造成的,下面先说下解决方案,在通过源码简单分析一下。
(二)对上面的问题,我们可以通过再加几个属性配置来解决
修改 spring-demo-service-feign 的配置文件:
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
# 如果项目配置有 server.servlet.context-path 属性,想要被 spring boot admin 监控,就要配置以下属性
instanc