探索云世界
【Feign】 基于 Feign 远程调用、 自定义配置、性能优化、实现 Feign 最佳实践
2024-05-27502
版权
版权声明:
本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《 阿里云开发者社区用户服务协议》和 《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写 侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:【Feign】 基于 Feign 远程调用、 自定义配置、性能优化、实现 Feign 最佳实践
一、 基于 Feign 远程调用
1.1 RestTemplate方式存在的问题
之前利用RestTemplate发起远程调用需要拼接字符串的形式传递url地址,通过这个url地址指明服务名称和请求路径以及请求参数信息,然后传递请求方式和返回值类型,由RestTemplate向这个指定地址发起请求,再把这个结果转成对应类型。
通过RestTemplate发送http请求的方式代码可读性差,编程体验不统一,若是参数非常多就会导致URL参数复杂,难以维护。
1.2 Feign 的介绍
Feign 是一个声明式的http客户端,声明式就相当于MySQL中的事务一样,在Spring中要开启事务,不需要手动打开或关闭,只需要在配置文件中声明事务,Spring就会自动实现事务,同样声明式http客户端也是如此,Feign可以帮助我们优雅的实现http请求的发送。
1.3 定义和使用Feign客户端
- 1.引入依赖
- 2.在启动类添加注解@EnableFeignClients开启Feign功能
- 3.编写Feign客户端
- 服务名称:userservice
- 请求方式:GET
- 请求路径:/user/{id}
- 请求参数:Long id
- 返回值类型:User
- 4.发送http请求
@Servicepublic class OrderService { @Autowired private OrderMapper orderMapper; @Autowired private UserClient userClient; public Order queryOrderById(Long orderId) { // 1.查询订单 Order order = orderMapper.findById(orderId); //2.用feign远程调用 User user = userClient.findById(order.getUserId()); //封装user到order order.setUser(user); // 4.返回 return order; }}
二、 自定义配置
Feign运行自定义配置来覆盖默认配置,可以修改的配置如下:
一般配置的只是日志级别
2.1 配置Feign日志(配置文件方式)
打开服务的配置文件,添加Feign的配置
- 全局生效:
- 局部生效:
2.2 配置Feign日志(Java代码方式)
- 声明bean
- 若是全局配置,则把它放到@EnableFeignClients这个注解中
- 若是局部配置,则把它放到@FeignClient这个注解中
三、 性能优化
3.1 Feign 底层客户端实现
- URLConnection:默认实现,不支持连接池
- Apache HttpClient:支持连接池
- OKHttp:支持连接池
优化Feign的性能主要包括:
- 使用连接池代替潜默认的URLConnection
- 日志级别,最好用 basic 或 none
3.2 Feign的性能优化(连接池配置)
- Feign中添加HttpClient的支持,引入依赖:
- 配置连接池:
四、 实现 Feign 最佳实践
4.1 新建module,命名feign-api,然后引入feign的starter依赖
- 新建模块:
- 引入feign的starter依赖:
4.2 将order-service中编写的UserClient、User、DefaultFeignConfiguration都复制到feign-api项目中
4.3 在order-service中引l入feign-api的依赖
4.4 修改order-service中的所有与上述三个组件有关的import部分,改成导入feign-api中的包
- 当定义的FeignClient不在SpringBootApplication的扫描包范围时,这些FeignClient无法使用。有两种方式解决:
- 方式一:指定FeignClient)所在包
- 方式二:指定FeignClient字节码(推荐)
目录
相关文章
【微信公众号对接】有关签名一直报错,提示invalid signature问题(我的签名和使用微信开发者工具验证返回的签名的是一致的)但还是报错!!!
【微信公众号对接】有关签名一直报错,提示invalid signature问题(我的签名和使用微信开发者工具验证返回的签名的是一致的)但还是报错!!!
一文教会你如何简单使用Fegin进行远程服务调用
这篇文章介绍了如何在分布式微服务架构中使用Feign进行远程服务调用,包括Feign的基本介绍、使用步骤,以及在项目中的实际运用方法,并通过测试验证了调用远程服务的成功性。
消息队列 MQ产品使用合集之报错提示是"the internal error!",是什么原因导致的”
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
Spring Boot 优雅实现降级功能:Hystrix 与 Resilience4j 的实践
【6月更文挑战第19天】在分布式系统中,服务降级是一种重要的容错机制。当某个服务不可用或响应慢时,降级机制可以保证系统的整体稳定性。本文将详细介绍如何在 Spring Boot 中使用 Hystrix 和 Resilience4j 实现降级功能。
热门文章
最新文章
1
DataWorks+Hologres:打造企业级实时数仓与高效OLAP分析平台
25
2
基于YOLOv8的FPS射击类游戏人物识别项目|完整源码数据集+PyQt5界面+完整训练流程+开箱即用!
23
3
豆蔻妇科大模型再突破:钉钉行业训练平台+精标数据SFT ,准确率从 77.1%上升至 90.2%
100
4
如何开发ERP系统中的计划管理板块(附架构图+流程图+代码参考)
28
5
关于大模型的一些知识
22
6
金属材料表面六种缺陷类型数据集 | 适用于YOLO等视觉检测模型(1800张图片已划分、已标注)
23
7
Windows IIS 10如何配置自签名SSL并实现自动跳转
21
8
看不见就管不好?——机器学习如何把供应链“照亮”!
25
9
数据不止防故障,还能防攻击?
15
10
城市早高峰太难了?其实你堵的是数据不是车!
17