Spring Cloud Hystrix: 控制stream推送频率

问题表现

在引入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

问题解决。

你可能感兴趣的:(spring-cloud)