java - 通过 Spring Cloud Netflix 访问服务的端点 /actuator/health:Zuul
问题描述
我有 Spring gateway:localhost:7856
和微服务 - “my-service”,例如localhost:8081
。我可以访问端点localhost:8081/actuator/health
-> {"status": "UP"}
。但是我需要通过网关访问这样的端点,比如localhost:7856/my-service/actuator/health
我的网关配置:
zuul:
ignoredServices: '*'
routes:
my-service:
path: /my-service/**
serviceId: my-service
stripPrefix: false
在这里,关键时刻,我无法改变stripPrefix to true
。我知道,我可以添加
management:
endpoints:
web:
base-path: /my-service/actuator
但这不是一个好的解决方案,因为在这种情况下还需要更改 eureka 配置(对于 eureka 默认端点是 service-name/actuator/health)以检查微服务的健康状态。或者我可以创建额外的端点来重定向到我需要的东西。但我试图找到最好的决定,可能是 zuul 的特殊属性还是覆盖 zuul 类?
解决方案
最后,我找到了解决方案。
import org.springframework.cloud.netflix.zuul.filters.Route;
import org.springframework.cloud.netflix.zuul.filters.SimpleRouteLocator;
import org.springframework.cloud.netflix.zuul.filters.ZuulProperties;
import org.springframework.cloud.netflix.zuul.filters.ZuulProperties.ZuulRoute;
public class CustomRouteLocator extends SimpleRouteLocator {
public CustomRouteLocator(String servletPath, ZuulProperties properties) {
super(servletPath, properties);
}
@Override
protected Route getRoute(ZuulRoute route, String path) {
boolean oldPrefix = route.isStripPrefix();
if (path.matches(".*/actuator/.*")) {
route.setStripPrefix(true);
}
Route resultRoute = super.getRoute(route, path);
route.setStripPrefix(oldPrefix);
return resultRoute;
}
}
我打开/关闭 stripPrefix 属性。效果很好。
推荐阅读
- c# - 将特定日期的文件复制到另一个目录
- javascript - 如何处理 Javascript 中嵌套获取请求的错误?
- regex - 正则表达式表从 Google 跟踪代码管理器 (GTM) 中的电子邮件中获取域名
- python - Python 布尔线程安全
- sql - SQL/BigQuery - 如何优化查询?
- amazon-web-services - S3 上的刷新页面会引发“访问被拒绝”错误,但如果我使用原点则不会
- react-native - 无法在 React Native 中添加文件名选项以形成数据
- java - 无法从 Firebase 读取用户数据
- r - 如何根据它们的空间位置选择一个值?
- php - Laravel 项目在 wordpress 项目的子目录中