前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenFeign统一Fallback处理

OpenFeign统一Fallback处理

原创
作者头像
code-x
发布2022-06-27 21:49:26
2.5K0
发布2022-06-27 21:49:26
举报
文章被收录于专栏:code-xcode-x
代码语言:javascript
复制
@Slf4j
@Configuration(proxyBeanMethods = false)
public class FeignLoadBalancedConfiguration {

    @Bean
    public LoadBalancerFeignClient feignClient(CachingSpringLoadBalancerFactory cachingFactory,
                                               SpringClientFactory clientFactory) {
        return new LoadBalancerFeignClient(new Client.Default(null, null), cachingFactory,
                clientFactory) {
            @Override
            public Response execute(Request request, Request.Options options) {
                Map<String, Collection<String>> headers = new HashMap<>(2);
                headers.put("content-type", Collections.singletonList("application/json"));
                headers.put("transfer-encoding", Collections.singletonList("chunked"));

                Response.Builder builder = Response.builder()
                        .status(200).headers(headers)
                        .request(request);
                try {
                    Response resp = super.execute(request, options);
                    if (Objects.equals(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, resp.status())) {
                        log.error("服务内部错误, req: {}, data: {}", request.url(),
                                new String(Optional.ofNullable(request.body()).orElse(new byte[]{}, StandardCharsets.UTF_8));
                        return builder.body(JSONObject.toJSONBytes(RestResult.fail("服务内部错误"))).build();
                    }
                    return resp;
                } catch (Exception e) {
                    log.error("服务不可用, req: {}, data: {}", request.url(),
                            new String(Optional.ofNullable(request.body()).orElse(new byte[]{}, StandardCharsets.UTF_8));
                    return builder.body(JSONObject.toJSONBytes(RestResult.fail("服务不可用"))).build();
                }
            }
        };
    }
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com