学科分类
目录
Spring Cloud

在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中熔断器开启时的页面效果

点击此处
隐藏目录