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=20001
我们通过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=20001
问题解决。
相关文章推荐
- Spring Cloud Hystrix: 控制stream推送频率
- spring-cloud-hystrix之Unable to connect to Command Metric Stream.异常
- spring-cloud-hystrix之Unable to connect to Command Metric Stream.异常
- Spring Cloud Stream 多通道创建
- spring cloud hystrix 请求缓存 (request cache)
- Spring Cloud Spring Boot mybatis分布式微服务云架构(十三)使用Spring Security安全控制
- Spring Cloud(Dalston.SR5)--Hystrix 断路器-缓存
- Spring Cloud中使用Hystrix 线程隔离导致ThreadLocal数据丢失
- SpringCloud (七)自定义HystrixCommand
- SpringCloud第四篇-Hystrix
- Spring Cloud# Spring Cloud Stream UnitTest设计模式
- 介绍一下关于Spring Cloud Stream
- springcloud(五):熔断监控Hystrix Dashboard和Turbine
- spring cloud bus 和 spring cloud stream 的使用场景
- Spring cloud系列十二 监控Hystrix界面:Hystrix dashboard 和 Turbine
- 【微服务架构】SpringCloud之Hystrix断路器(六)
- 笔记:Spring Cloud Hystrix 服务容错保护
- SpringCloud关于@FeignClient和Hystrix集成对http线程池监控问题
- 【Spring Cloud】Hystrix 防御机制
- SpringCloud stream连接RabbitMQ收发信息