在Feign中使用Hystrix熔断
Feign自带熔断功能,默认情况下,熔断功能是关闭的。如果要开启熔断,只需在配置文件中将hystrix.enabled设置为true即可。
下面在上一小节的基础上对项目进行改造,演示如何在Feign中使用Hystrix熔断配置,具体步骤如下:
(1)开启Hystrix熔断功能。在eureka-hystrix-client项目的配置文件application.yml中添加开启熔断的配置,具体如下:
feign:
hystrix:
enabled: true
小提示:
因为在Feign的起步依赖中引入了Hystrix依赖,所以在Feign中使用Hystrix不需要引入任何的依赖,只需要在配置文件中开启即可。
(2)在eureka-hystrix-client的启动类中添加@EnableFeignClients开启Feign Client功能,如例1所示。
例1 eureka-hystrix-client\src\main\java\com\itheima\eurekahystrixclient\EurekaHystrixClientApplication.java
1 @SpringBootApplication
2 @EnableHystrix
3 @EnableFeignClients
4 @EnableEurekaClient
5 public class EurekaHystrixClientApplication {
6 public static void main(String[] args) {
7 SpringApplication.run
8 (EurekaHystrixClientApplication.class, args);
9 }
10 }
(3)进入项目eureka-hystrix-client,在LocalItemService接口上方的@FeignClient注解中,增加fallback属性配置,指定LocalItemServiceImpl类为失败逻辑处理类,如例2所示。
例2 eureka-hystrix-client\src\main\java\com\itheima\eurekahystrixclient\service\LocalItemService.java
1 @FeignClient(value = "hystrix-provider",
2 configuration =HystrixConfig.class,
3 fallback = LocalItemServiceImpl.class)
4 public interface LocalItemService {
5 @RequestMapping(value = "/hi", method = RequestMethod.GET)
6 public String hi(@RequestParam(value = "id")String id);
7 }
需要注意的是,使用fallback属性指定的用于处理回退逻辑的类,必须实现@FeignClient注解修饰的接口。
(4)在service包中新建失败逻辑处理类LocalItemServiceImpl,并实现被@FeignClient修饰的LocalItemService接口,如例3所示。
例3 eureka-hystrix-client\src\main\java\com\itheima\eurekahystrixclient\service\LocalItemServiceImpl.java
1 @Component
2 public class LocalItemServiceImpl implements LocalItemService
3 {
4 @Override
5 public String hi(String id) {
6 return String.format("Hi,your message is : %s but request
7 bad.",id);
8 }
9 }
在例3中,LocalItemServiceImpl实现了LocalItemService接口,并定义了一个hi()方法用于编写处理熔断的具体逻辑。这里,我们使用@Component注解修饰类LocalItemServiceImpl,其目的是将该类交给Spring容器管理。
(5)启动服务并进行测试。依次启动服务eureka-server, hystrix-provider, eureka-hystrix-client,访问http://localhost:8764/hi?id=hello
,浏览器显示的效果如图1所示。
图1 Feign中熔断器未开启时的页面效果
关闭服务提供者hystrix-provider并请求http://localhost:8764/hi?id=hello
,发现调用了熔断器的失败处理逻辑方法,表明熔断器已经启动,效果如图2示效果。
图2 Feign中熔断器开启时的页面效果