springcloud系列17——Feign的Hystrix支持

Feign的Hystrix支持

springcloud官方文档参考:17.4 Feign Hystrix Support.

如果Hystrix在类路径上并且feign.hystrix.enabled = true,Feign将用断路器包装所有方法。

如果只是想某个Feign Client禁用Hystrix,可以创建一个普通的Feign.Builder,并将scope设置为prototype。

例如:

1
2
3
4
5
6
7
8
@Configuration
public class FooConfiguration {
@Bean
@Scope("prototype")
public Feign.Builder feignBuilder() {
return Feign.builder();
}
}

Feign Hystrix的回退(fallbacks)

Hystrix支持回退的概念:当断路器打开或出现错误时将执行默认的代码路径。 要为给定的@FeignClient启用回退,请将fallback属性设置为实现回退的类名称。 您还需要将您的实现声明为Spring bean。

示例代码:
这里以movie模块修改,新的模块名为microservice-springcloud-movie-feign-with-hystrix。

1.为Feign启用hystrix

修改application.yml

1
2
3
feign:
hystrix:
enabled: true

2.编写FeignClient,并设置fallbacks

1
2
3
4
5
@FeignClient(name = "microservice-springcloud-user",fallback = UserHystrixClientFallback.class)
public interface UserFeignClient {
@RequestMapping(value = "/sample/{userId}", method = RequestMethod.GET)
User findUserById(@PathVariable("userId") Long userId);
}

3.创建回退类

1
2
3
4
5
6
7
8
9
10
11
@Component
public class UserHystrixClientFallback implements UserFeignClient
{
@Override
public User findUserById(Long userId)
{
User user = new User();
user.setId(0L);
return user;
}
}

4.测试

1.启动Eureka Server;
2.启动User服务;
3.启动microservice-springcloud-movie-feign-with-hystrix。

启动后,浏览器访问/user/1,得到正确响应。将user服务关闭,连续刷新20次以上,再次访问得到的结果是user的id为0,即我们的Fallback类中实现的方法。结果与springcloud系列15——hystrix简介及简单代码示例一节的一致。

代码结构:

这里要注意代码结构,否则在启动时会出现一些问题。
应用启动类如下:

1
2
3
4
5
6
7
8
9
10
@SpringBootApplication
@ComponentScan({"com.tommy.springcloud","com.tommy.config.fallback"})
@EnableFeignClients("com.tommy.config.feign")
public class MovieAppWithFeignAndHystrix
{
public static void main( String[] args )
{
SpringApplication.run(MovieAppWithFeignAndHystrix.class,args);
}
}

springboot扫描的类要与feign的分开。同时Fallback的类也要被springboot扫描到。

Donny wechat
欢迎关注我的个人公众号
打赏,是超越赞的一种表达。
Show comments from Gitment