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

OpenFeign统一Fallback处理

原创
作者头像
code-x
发布于 2022-06-27 13:49:26
发布于 2022-06-27 13:49:26
2.9K00
代码可运行
举报
文章被收录于专栏:code-xcode-x
运行总次数:0
代码可运行
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@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 删除。

评论
登录后参与评论
暂无评论
推荐阅读
ES2020的新特性:String 的 matchAll 方法、动态导入语句 import()等
matchAll() 方法返回一个包含所有匹配正则表达式的结果的迭代器。可以使用 for...of 遍历,或者使用 展开运算符(...) 或者 Array.from 转换为数组.
前端达人
2021/06/16
7100
ES11屡试不爽的新特性,你用上了几个?
严格限制一些用于内部使用的Class变量,只需要在变量前「#」,就可以使其成为私有变量,并且无法在class外部直接访问
Sneaker-前端公虾米
2021/12/23
5930
ES11屡试不爽的新特性,你用上了几个?
📚从ES7到ES12,了解JavaScript的新特性与语法演变
Array.prototype.includes 是一个用于判断数组是否包含特定元素的方法。它返回一个布尔值,表示数组中是否存在指定的值。
linwu
2023/07/27
4260
ES11屡试不爽的新特性,你用上了几个?
严格限制一些用于内部使用的Class变量,只需要在变量前添加#,就可以使其成为私有变量,并且无法在class外部直接访问
前端公虾米
2020/10/22
6900
ES11屡试不爽的新特性,你用上了几个?
【ES6+】006-ES6新特性:Promise
Promise 是 ES6 引入的异步编程的新解决方案。语法上 Promise 是一个构造函数,用来封装异步操作并可以获取其成功或失败的结果;
訾博ZiBo
2025/01/06
860
【ES6+】006-ES6新特性:Promise
种草 ES2020 新特性,真的学不动了
https://juejin.im/post/5e09ca40518825499a5abff7
coder_koala
2020/02/24
5370
【ES6+】009-ES7新特性:Array.prototype.includes、指数操作符
在 ES7 中引入指数运算符「**」,用来实现幂运算,功能与 Math.pow 结果相同;
訾博ZiBo
2025/01/06
500
【ES6+】009-ES7新特性:Array.prototype.includes、指数操作符
【ES6+】007-ES6新特性:Set集合、Map集合、class类
ES6 提供了新的数据结构 Set(集合)。它类似于数组,但成员的值都是唯一的,集合实现了 iterator 接口,所以可以使用『扩展运算符』和『for…of…』进行遍历,集合的属性和方法:
訾博ZiBo
2025/01/06
3390
【ES6+】007-ES6新特性:Set集合、Map集合、class类
【ES6+】010-ES8新特性:async和await、对象方法扩展
訾博ZiBo
2025/01/06
600
【ES6+】010-ES8新特性:async和await、对象方法扩展
ECMAScript 2020(ES11)新特性简介
ES11是ECMA协会在2020年6月发行的一个版本,因为是ECMAScript的第十一个版本,所以也称为ES11.
程序那些事
2021/08/02
5220
【ES6+】002-ES6新特性:const 关键字、变量的解构赋值、模板字符串
ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构赋值;
訾博ZiBo
2025/01/06
850
【ES6+】002-ES6新特性:const 关键字、变量的解构赋值、模板字符串
【ES6+】011-ES9新特性:Rest 参数与 spread 扩展运算符、正则扩展
Rest 参数与 spread 扩展运算符在 ES6 中已经引入,不过 ES6 中只针对于数组,在 ES9 中为对象提供了像数组一样的 rest 参数和扩展运算符;
訾博ZiBo
2025/01/06
730
【ES6+】011-ES9新特性:Rest 参数与 spread 扩展运算符、正则扩展
ES2020新特性
ES2020 是 ECMAScript 对应 2020 年的版本。这个版本不像 ES6 (ES2015)那样包含大量新特性。但也添加了许多有趣且有用的特性。
浪里行舟
2020/04/02
6280
ES2020新特性
ES6-11
Rest 参数与 spread 扩展运算符在es6中已经引入,但仅限于数组,es9中为对象提供了像数组一样的 rest 参数和扩展运算符
4O4
2022/04/25
2560
【ES6+】012-ES10新特性:Object.fromEntries、trimStart、trimEnd、Array.prototype.flat、flatMap、Symbol.prototype
訾博ZiBo
2025/01/06
570
【ES6+】012-ES10新特性:Object.fromEntries、trimStart、trimEnd、Array.prototype.flat、flatMap、Symbol.prototype
【ES6+】003-ES6新特性:简化对象和函数写法、箭头函数
ES6 允许在大括号里面,直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁;
訾博ZiBo
2025/01/06
1200
【ES6+】003-ES6新特性:简化对象和函数写法、箭头函数
ES6新特性
除此之外还有一个字符串模板,相当于加强版的字符串。用反引号``(之前我们字符串一直使用的是""),可以用来定义多行字符串,还可以在字符串中加入变量和表达式。
乐心湖
2020/07/31
7600
ES6新特性
【ES6+】001-ES6概述、ES 6 新特性:let 关键字
ECMA(European Computer Manufacturers Association)中文名称为欧洲计算机制造商协会,这个组织的目标是评估、开发和认可电信和计算机标准。1994 年后该组织改名为 Ecma 国际;
訾博ZiBo
2025/01/06
570
【ES6+】001-ES6概述、ES 6 新特性:let 关键字
一文吃透es6 ~ es13所有新特性
ECMAScript是一个脚本语言规范,通常看作是js的标准规范,但是js其实是ES的扩展语言。
心念
2023/01/11
2.1K0
es6中class类的声明和继承
ECMAScript 6-第三讲 本章目标: 掌握es6中class类的声明 掌握类的继承 Json的新的应用 Promise对象的方法 本章内容: Class类的声明: 所谓的java的面向对象和这个很相似,但是在js其实是基于对象的,所谓的基于对象就是一直在用对象而不是,而不是完全使用面向对象的思想,面向对象我们都知道是封装,继承,多态,而基于对象,其实就是在使用对象。对象比数组强的地方在于他有属性和方法。所以在js中很少使用类这个方式。但是在es6中提供了这样一种声明方式 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>class</title> </head> <body>
张哥编程
2024/12/19
1130
推荐阅读
相关推荐
ES2020的新特性:String 的 matchAll 方法、动态导入语句 import()等
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档