版权声明:本文为博主原创文章,转载请注明出处和原作者。 https://blog.csdn.net/tracker_w/article/details/70800663
问题表现
在引入spring-boot-starter-actuator
依赖后,Spring Boot应用会暴露出/hystrix.stream
端点以供监控工具读取该应用的Hystrix Metrics数据。但是默认情况下,该Endpoint每间500ms就会向建立连接的客户端发送metrics数据,频率太高了,浪费CPU和带宽资源。在Hystrix Dashboard主页中虽然有让你输入delay的输入框,如下图:
但是该参数根本不起作用!
查找原因
经过抓包,发现在设置delay参数后,实际向应用发的请求是
http://localhost:9000/hystrix.stream?delay=2000
我们通过curl发送同样的请求,发现delay参数确实被无视了,应用依然每隔500ms就向我们推送一次断路器数据。通过查阅源码,我发现控制该行为的地方在HystrixDashboardStream
类中:
public class HystrixDashboardStream {
final int delayInMs;
private static final DynamicIntProperty dataEmissionIntervalInMs =
DynamicPropertyFactory.getInstance().getIntProperty("hystrix.stream.dashboard.intervalInMilliseconds", 500); // 就是这里, 通过Archaius来读取配置文件,默认值为500ms
}
因为这个类是在应用启动时就进行初始化的,且dataEmissionIntervalInMs
已经被声明成了private static final
,所以这个参数是在应用启动时唯一确定好了,根本无法动态修改!坑!
解决方案
既然无法动态设置,那就直接改成一个大一点的固定值也是可以接受的。在classpath下新建config.properties
文件,添加以下配置:
hystrix.stream.dashboard.intervalInMilliseconds=2000
问题解决。