探索云世界
【Feign】 基于 Feign 远程调用、 自定义配置、性能优化、实现 Feign 最佳实践
2024-05-2773
版权
版权声明:
本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《 阿里云开发者社区用户服务协议》和 《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写 侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
本文涉及的产品
日志服务 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字节码(推荐)
目录
相关文章
【Spring底层原理高级进阶】微服务 Spring Cloud 的注册发现机制:Eureka 的架构设计、服务注册与发现的实现原理,深入掌握 Ribbon 和 Feign 的用法 ️
【Spring底层原理高级进阶】微服务 Spring Cloud 的注册发现机制:Eureka 的架构设计、服务注册与发现的实现原理,深入掌握 Ribbon 和 Feign 的用法 ️
再见 Feign!推荐一款微服务间调用神器,跟 SpringCloud 绝配
在微服务项目中,如果我们想实现服务间调用,一般会选择Feign。之前介绍过一款HTTP客户端工具Retrofit,配合SpringBoot非常好用!其实Retrofit不仅支持普通的HTTP调用,还能支持微服务间的调用,负载均衡和熔断限流都能实现。今天我们来介绍下Retrofit在Spring Cloud Alibaba下的使用,希望对大家有所帮助!
热门文章
最新文章
1
世界级大模型群,进化阿里云服务器操作系统新范式
33
2
5年数据观巨变,这家公司如何在AI和大模型数据赛道遥遥领先?
39
3
如何帮助我们改造升级原有架构——基于TDengine 平台
25
4
在全球开源“集市”新时代,共创中国根社区的领导力
24
5
Twaver-HTML5基础学习(29)界面交互
26
6
Twaver-HTML5基础学习(28)工具条(添加自定义按钮_自定义事件)
20
7
Twaver-HTML5基础学习(27)过滤器
16
8
Twaver-HTML5基础学习(26)背景
13
9
Twaver-HTML5基础学习(25)网元可视化视图组件(Network)
16
10
针对AI模型的对抗性攻击日益增多:你现在应该怎么做?
29
相关课程
更多相关实验场景
更多下一篇