在上一篇文章《微服务实战spring cloud tencent系列(十四)实战Spring Cloud Tencent 服务熔断降级之Feign支持》我们实战演示了feign进行服务熔断降级。在代码里面,我们可以看到在feignclient调用的时候,是我们手动定义的这个fallback,如下图:
这个fallback类是需要实现这个feignclient这个接口的,如下图:
试想一下,在真实的业务中,我们会涉及到大量的服务之间的调用,那么我们是不是所有的feignclient都需要去写一遍这个fallback处理呢?答案是:咱们在研发这个行业,主要涉及的还是能简则简的原则,所以我们能不能不写这些fallback呢?其实是可以的,在spring cloud tencent里面,对于服务熔断降级,如果在代码里面没有检测到编写的服务熔断降级的类及方法的话,它会去北极星(polaris mesh)上面去找,所以对于我们来说,我们可以直接在北极星里面进行配置,如下图:
也就是在这个地方,当触发熔断的时候,我们可以统一定义这个降级的内容返回这里我们测试一下,在刚才的配置里面打开这个熔断后降级,然后把这个body配置一下:
{ "code": 501, "message": "当前服务不可访问,进行北极星统一降级返回", "success": false }
如下图:
备注:
1、这里我们返回的是一串json,所以需要在这个response的header里面配置下content-type为json即可。
然后我们回到user-service的feignClient上,去掉刚才配置的fallback,示例如下:
package org.user.service.client; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.context.annotation.Primary; import org.springframework.web.bind.annotation.GetMapping; import org.user.service.model.BaseResponse; @Primary @FeignClient(name = "product-service") public interface ProductClient { @GetMapping("/product") public BaseResponse product(); }
然后我们再启动项目,访问下test接口:http://192.168.31.147:8081/test
第一次访问的时候会报错:
当访问达到熔断降级的条件之后,就会返回服务器上定义的内容了,如下图:
可以看到返回了服务器上配置的自定义返回信息。
备注:
1、这里在北极星里面定义的数据结构需要进行反序列化,这里的反序列化格式是feignclient的返回实体,如下图:
所以如果需要在北极星里面配置统一的自定义返回格式的话,则所有的远程调用返回值格式一定要保持一致,如果不一致,则发生服务降级的时候,会反解json报错,这样就得不到我们想要的效果了。
2、在北极星里面定的降级服务自定义返回结果,只有在发生降级的时候,才会返回这个自定义结果,如果没有达到熔断要求的话,返回的结果还是系统的异常,所以使用这个的话,需要慎重。
最后按照惯例,附上本案例的源码,登录后即可下载。
还没有评论,来说两句吧...