问题表现

​spring-boot-starter-actuator​​依赖后,Spring Boot应用会暴露出​​/hystrix.stream​​端点以供监控工具读取该应用的Hystrix Metrics数据。但是默认情况下,该Endpoint每间500ms就会向建立连接的客户端发送metrics数据,频率太高了,浪费CPU和带宽资源。在Hystrix Dashboard主页中虽然有让你输入delay的输入框,如下图: 

Spring Cloud Hystrix: 控制stream推送频率_spring

 

但是该参数根本不起作用!

查找原因

经过抓包,发现在设置delay参数后,实际向应用发的请求是

http://localhost:9000/hystrix.stream?delay=2000

​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​​,所以这个参数是在应用启动时唯一确定好了,根本无法动态修改!坑!

解决方案

​config.properties​​文件,添加以下配置:

hystrix.stream.dashboard.intervalInMilliseconds=2000

问题解决。