springboot集成hystrix和feign,解决fallback,fallbackFactory不生效问题
fallback,fallbackFactory不生效问题
以往我们配置在yml中配置如下,如果不生效可以改成下面配置:
注释掉feign.hystrix.enabled启用feign.circuitBreaker.enabled
#开启熔断
feign:
# httpclient:
# enabled: true
client:
config:
metaDataClient:
connect-timeout: 10000
read-timeout: 10000
# hystrix:
# enabled: true
circuitBreaker:
enabled: true
feign调用无法解析IPage问题
该问题解决方法见链接:解决IPage无法解析问题
引入依赖
<!--feign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!--hystrix-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
<version>2.2.10.RELEASE</version>
</dependency>
启动类配置:
hystrix注解@EnableHystrix,feign注解@EnableFeignClients
@EnableFeignClients
@EnableHystrix
hystrix
该示例中提供了两种方法,一种是配置在controller上面,使用@DefaultProperties注解,一种是配置在方法上面使用@HystrixCommand注解,两种方法需要注意的地方是,生效的方法需要和原方法的参数一致,即参数个数,类型顺序一致;该示例中提供了两个defaultTest方法,最后打印输出的是"传入参数为:" name “方法异常”
@RestController
@RequestMapping("/blogLike")
@Api(tags = "BlogLikeController", description = "博客点赞Controller")
//@DefaultProperties(defaultFallback = "defaultTest")
public class BlogLikeController {
@Resource
private IBlogLikeService iBlogLikeService;
@Resource
private BlogFeign blogFeign;
@PostMapping("/page")
@ApiOperation(value = "分页查询")
public IPage<BlogLike> page(@RequestBody BasePage page) {
return iBlogLikeService.page(page);
}
@GetMapping("/test")
@HystrixCommand(fallbackMethod = "defaultTest", commandProperties = {
@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "310")
})
@ApiOperation("测试HystrixCommand")
public String test(@RequestParam String name) {
try {
Thread.sleep(500L);
} catch (Exception e) {
e.printStackTrace();
}
return blogFeign.test();
}
public String defaultTest(String name) {
return "传入参数为:" name "方法异常";
}
public String defaultTest() {
return "方法异常";
}
@GetMapping("/test2")
@ApiOperation("测试fallback")
public String test2() {
return blogFeign.test();
}
@PostMapping("/page2")
@ApiOperation(value = "分页查询2")
public IPage<ResponseBlog> page2(@RequestBody BasePage page) {
return blogFeign.page(page);
}
@GetMapping("/getById2")
@ApiOperation(value = "根据id查询")
public ResponseBlog getById2(@RequestParam Long id) {
return blogFeign.getById(id);
}
}
fegin
@FeignClient中属性name和value作用是一样的,对应的是spring.application.name这个属性(如果url没有配置的话,配置了单纯就是个名字),如果以name方式配置,则需要配合path使用,添加对应的请求路径前缀,当fallback和fallbackFactory同时配置时,生效的为fallback
@FeignClient(name = "producer-test",
// path = "/producer/test/blog",
url = "http://127.0.0.1:1003/producer/test/blog",
// configuration = FeignConfig.class,
fallback = BlogFallback.class,
fallbackFactory = BlogFallbackFactory.class)
public interface BlogFeign {
@PostMapping("/page")
IPage<ResponseBlog> page(BasePage page);
@GetMapping("/test")
String test();
@GetMapping("/getById")
ResponseBlog getById(Long id);
}
fallback对应实现类
@Component
@Slf4j
public class BlogFallback implements BlogFeign {
@Override
public IPage<ResponseBlog> page(BasePage page) {
return null;
}
@Override
public String test() {
return "fallback-test方法错误";
}
@Override
public ResponseBlog getById(Long id) {
return null;
}
}
fallbackFactory对应实现类
@Component
@Slf4j
public class BlogFallbackFactory implements FallbackFactory<BlogFeign> {
@Override
public BlogFeign create(Throwable cause) {
log.error("feign服务异常,错误信息如下:" cause.getMessage());
return new BlogFeign() {
@Override
public IPage<ResponseBlog> page(BasePage page) {
return null;
}
@Override
public String test() {
return "fallbackFactory-test方法错误";
}
@Override
public ResponseBlog getById(Long id) {
return null;
}
};
}
}
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhifkfie
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
excel图片置于文字下方的方法
PHP中文网 06-27 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
微信提示登录环境异常是什么意思原因
PHP中文网 04-09 -
微信运动停用后别人还能看到步数吗
PHP中文网 07-22 -
微信人名旁边有个图标有什么用
PHP中文网 03-11