SpringCloudFeign通过FallbackFactory显示异常信息

更新时间:2023-05-18 00:14:10 阅读: 评论:0

SpringCloudFeign通过FallbackFactory显⽰异常信息SpringCloud Feign可以进⾏服务消费,⽽且内置了Hystrix,能够进⾏熔断。
Feign可以通过fallback指定熔断回调的类。代码⽰例及讲解可见:
但是,有时候我们还需要记录异常信息,可以通过fallbackFactory实现。
服务提供者
⽰例如下:
@RestController
public class UrController {
@PostMapping("/ur/name/{id}")
public JSONObject getUrNameById(@PathVariable("id") Integer id ) throws Exception {
System.out.println("==========================>getUrNameById(),id为:"+id);
//直接抛异常,是为了⽅便测试服务熔断和降级。
throw  new Exception("getUrNameByIdException");
}
@PostMapping("/ur")
public Ur getUrById(@RequestParam("id") Integer id  ) throws Exception {
System.out.println("=====================>getUrById(),id为:"+id);
throw  new Exception("getUrByIdException");
}
}
服务消费者
FeignClient接⼝
⾸先是@FeignClient,属性fallbackFactory指定实现类,如下:
/
**
*  使⽤fallbackFactory捕获异常,并进⾏服务熔断、服务降级。
*/
难过的一件事
@FeignClient(value = "eureka-client",fallbackFactory = UrFeignClientFallbackFactory.class)
public interface UrFeignClient {
@PostMapping(value = "/ur/name/{id}")
JSONObject getUrNameById(@PathVariable("id") Integer id);
@PostMapping(value = "/ur")
琢磨的意思是什么
Ur getUrById(@RequestParam("id") Integer id);
}
FallbackFactory实现类
肽合成
接下来是FallbackFactory的实现类,需要重写create()⽅法,这个⽅法的参数为Throwable异常类,可以借此记录异常信息。create()返回进⾏服务熔断/降级的Hystrix类。
@Component
public class UrFeignClientFallbackFactory implements FallbackFactory<UrFeignClient> {
@Override
public UrFeignClient create(Throwable cau) {
System.out.println("=================》fallback reason was:  " + Message());
return new UrFeignClientHystrix();
//也可以不写UrClientFallbackFactory类,直接⽤匿名对象写成以下形式:
//        return new UrFeignClient(Integer id) {
//            @Override
//            public JSONObject getUrNameById() {
//                JSONObject resultJson = new JSONObject();
//                resultJson.put("id",  "-1" );
//                resultJson.put("name", "null"  );
//                return resultJson;挂钟风水
//            }
//        };
}
}
FeignClient实现类(也就是Hystrix类)
Hystrix类如下所⽰:
@Component空调保修
public class UrFeignClientHystrix implements UrFeignClient {
/**
* 服务熔断
* @param id
* @return
*/
@Override
public JSONObject getUrNameById(Integer id) {那天如果
System.out.println("=======================>UrFeignClientHystrix ");
JSONObject resultJson = new JSONObject();
resultJson.put("errCode",  "0404" );
String description="查询id为"+id+"的⽤户,服务异常,暂时熔断";
resultJson.put("description", description  );
return resultJson;
}
@Override
public Ur getUrById(Integer id) {
System.out.println("=======================>UrFeignClientHystrix ");
//直接返回id为-1的⽤户圣诞节介绍
Ur ur = new Ur();
ur.tId(-1);
return ur;
库管是干什么的
}
}
测试
启动注册中⼼,服务提供者,服务消费者。
访问服务消费者的接⼝,就能够得到服务提供者抛出的熔断结果和异常信息。访问getUrById对应的接⼝,结果如下:
访问另⼀个接⼝,返回结果如下:
异常信息如下所⽰:
======================》fallback reason was: {} status 500 reading UrFeignClient#getUrNameById(Integer); content:
{"timestamp":1557456567128,"status":500,"error":"Internal Server Error","exception":"java.lang.Exception","message":"getUrNameByIdException","path":"/ur/name/2"} =======================>UrFeignClientHystrix
可以看到message中的异常getUrNameByIdException,就是我们在服务提供者中抛出的异常。
完整代码见Github

本文发布于:2023-05-18 00:14:10,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/910355.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:服务   熔断   服务提供者   信息   降级   代码
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图