【注】出现问题的版本在 SpringBoot 2.x 以上,1.x 的仅供参考,一般出问题都是第三种类型
1. 使用 feign调用的服务,需要设置 hystrisfeign:hystrix:enabled: true 即可
2. 网关服务 zuul 本来就默认有 Hystrix Dashboard,不用额外配置
3. 非 feign 的 SpringBoot 项目,需要以下配置:
在解决问题之前首先要保证正确引入以下三个依赖,并且启动类有以下三个注解,并且服务接口一定要有 @HystrixCommand注解,否则一切都没有意义。
需要的依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>
启动类需要添加以下三个注解:
@EnableHystrix
@EnableCircuitBreaker
@EnableHystrixDashboard
服务接口有 @HystrixCommand 注解,例如:
@RequestMapping("/hi")
@HystrixCommand(fallbackMethod = "hiError")
public String home(@RequestParam(value = "name", defaultValue = "roc") String name) {
return "hi " + name + " ,i am from port:" + port;
}
public String hiError(String name) {
return "hi,"+name+",sorry,error! The system is under repair.";
}
问题汇总:
Q:访问 hystrix.stream 时 404 Not Found?
A:访问的时候不要访问 http://localhost:8762/hystrix.stream,要访问 http://localhost:8762/actuator/hystrix.stream
Q:访问 /actuator/hystrix.stream 时 404 Not Found?
A:请在启动类中添加以下代码:
@Bean
public ServletRegistrationBean getServlet() {
HystrixMetricsStreamServlet streamServlet = new HystrixMetricsStreamServlet();
ServletRegistrationBean registrationBean = new ServletRegistrationBean(streamServlet);
registrationBean.setLoadOnStartup(1);
registrationBean.addUrlMappings("/actuator/hystrix.stream");
registrationBean.setName("HystrixMetricsStreamServlet");
return registrationBean;
}
重新启动即可访问。
Q:访问 /actuator/hystrix.stream 一直 ping ?
A:需要调用一个 hysrix 服务接口,该接口必须添加 @HystrixCommand 注解,如果没有调用,访问 hystrix.stream 会一直ping,hystrix 监控界面一直 loading,这个时候查看 hystrix.stream 是没数据的。