您的位置:首页 > 编程语言 > Java开发

Spring Cloud Hystrix: 控制stream推送频率

2017-10-25 19:52 633 查看


问题表现

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

我们通过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
}
1
2
3
4
5
6

因为这个类是在应用启动时就进行初始化的,且
dataEmissionIntervalInMs
已经被声明成了
private
static final
,所以这个参数是在应用启动时唯一确定好了,根本无法动态修改!坑!


解决方案

既然无法动态设置,那就直接改成一个大一点的固定值也是可以接受的。在classpath下新建
config.properties
文件,添加以下配置:
hystrix.stream.dashboard.intervalInMilliseconds=2000
1

问题解决。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: