文章目录
Feign的起步依赖中已经引入了Hystrix的依赖,所以在Feign中使用Hystrix不需要引入其他依赖,只需要在application.yml中配置如下:
feign.hystrix.enabled = true,开启熔断机制,默认是false;
该demo在【spring cloud 第四篇】声明式调用 Feign
进行改造:
1 需要修改的文件
- application.yml 配置文件
- MyFeignService.java 类
- MyEurekaFeignClient.java
- 新增一个 MyHystrix.java 文件,并实现MyEurekaFeignClient
如下如:
1.1 application.yml
- feign.hystrix.enabled = true,开启熔断机制
- yml 文件中没有该提示,是IDEA的问题,不用理会
feign:
hystrix:
enabled: true # 文件中没有提示,不影响
1.2 MyEurekaFeignClient
- 在@FeignClient的注解的fallback配置加上快速失败的处理类(该处理类是Feign熔断器的逻辑处理类,必须实现被@FeignClient修饰的接口)
- 本案例中的 MyHystrix就是实现了MyEurekaFeignClient
/**
* 添加 fallback = MyHystrix.class
*/
@FeignClient(value = "eureka-client-4",configuration = MyFeignConfig.class,fallback = MyHystrix.class)
public interface MyEurekaFeignClient {
/**
* 调用 eureka-client-4 服务的getPort接口
* @PathVariable(name = "name")中的"name"必须要写,并且与eureka-client-4 服务的getPort接口对应
*/
@GetMapping(value = "/getPort/{name}")
public String getPortForEurekaClient(@PathVariable(name = "name") String name);
}
1.3 新建 MyHystrix
- MyHystrix 必须实现MyEurekaFeignClient ,MyEurekaFeignClient 是被- @FeignClient注解修饰的类
- MyHystrix 需要添加@Component注解,注入到ioc容器中
@Component
public class MyHystrix implements MyEurekaFeignClient {
@Override
public String getPortForEurekaClient(String name) {
return "测试feign结合hystrix-error>:"+name;
}
}
1.4 MyFeignService服务类
@Service
public class MyFeignService {
/* @Autowired
private MyEurekaFeignClient myEurekaFeignClient;
*/
@Autowired
private MyEurekaFeignClient myHystrix;
public String getPort(String name) {
// return myEurekaFeignClient.getPortForEurekaClient(name);
return myHystrix.getPortForEurekaClient(name);
}
}
1.5 查看结果
- 启动 eureka-server 和 eureka-client,再启动eureka-feign-client
访问http://localhost:8761/ 如下图:
访问http://localhost:8766/myFeign/getPort/feign测试,返回正常
2020-09-17 18:11:10---feign测试-8763
关闭eureka-client服务继续访问 http://localhost:8766/myFeign/getPort/feign测试 结果返回如下:
2020-09-17 18:12:57---测试feign结合hystrix-error>:feign测试
由此可见,当被调用的服务不可用时,当前服务会进入fallback的逻辑处理类(即MyHystrix ),由这个类来执行熔断器打开是的处理逻辑
2 feign中使用hystrix dashboard
pom文件添加依赖
- 和 ribbon集成hystrix dashboard类似,需要在pom文件中添加actuator、hystrix和hystrix dashboard的起步依赖。
- 有的人可能会有疑惑:feign自带hystrix,为什么还要加入spring-cloud-starter-hystrix,因为feign自带的hystrix的依赖不是起步依赖
<!--feign中使用hystrix dashboard相关依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
<version>1.4.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
<version>1.4.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
修改启动类
- 添加@EnableHystrixDashboard 开启监控熔断器状态
- 注入 ServletRegistrationBean
@EnableHystrixDashboard // 开启监控熔断器状态
public class EurekaFeignClientApplication
{
public static void main(String[] args) {
SpringApplication.run(EurekaFeignClientApplication.class,args);
}
@Bean
public ServletRegistrationBean getServlet() {
HystrixMetricsStreamServlet streamServlet = new HystrixMetricsStreamServlet();
ServletRegistrationBean registrationBean = new ServletRegistrationBean(streamServlet);
registrationBean.setLoadOnStartup(1);
registrationBean.addUrlMappings("/hystrix.stream");
registrationBean.setName("HystrixMetricsStreamServlet");
return registrationBean;
}
}
查看结果,
- 查看hystrix dashboard和 ribbon集成hystrix dashboard查看结果一样 3.3 demo
- 依次启动工程 eureka-server,eureka-client,eureka-feign-client,在浏览器访问http://localhost:8767/hystrix.stream,在调用http://localhost:8767/myFeign/getPort/熔断监控测试,打印熔断器的数据指标如下:
- 再访问http://localhost:8767/hystrix,依次填写http://localhost:8767/hystrix.stream、2000、恰锅锅(这个随意填写)