8-Feign远程调用
简介与安装
RestTemplate方式存在的问题:
feign是声明式的,也就是制定规则后简单进行调用即可完成请求发送:
feign使用方式分三步:加入依赖,添加配置,添加声明:
远程调用
feign client表示针对哪个服务进行调用,http接口方法的参数与SpringMVC相同:
采用feign进行调用的语法如下:
小总结:
自定义日志配置
日志等级信息,默认是none,也就是没有日志:
- basic:基本信息,发送时间/结束时间/耗时
- headers:基本信息+请求头信息
- full:基本信息+请求头信息+请求体+响应体
性能优化
feign虽然是声明式的远程调用,底层还是基于其他的框架来实现的远程调用。
性能优化主要从底层框架的选择可日志输出内容方面来进行:
以下将feign的连接方式更改为Apache HttpClient方式,因为这种方式支持连接池:
引入的依赖是可以直接使用的,从配置中对连接池进行配置即可。实际连接数的大小和连接池的大小要从压测来获得。
最佳实现方案
继承模式
消费者调用的接口方法和提供者的控制层接口是一样的,所以这两者应该可以提取成公共的父接口:
文中表示并不推荐此类方式,因为这种方式会导致耦合度过高的问题。
抽取模式
第二种优化方式:如果多个消费者都调用同一个服务,并且使用方式也是相同的,那就可以将远程调用的代码抽取成公用的依赖,依赖中还可以包含对实体类/配置等等的共用的内容,以简化每个客户端重复编码的问题,并制定统一的标准:
此类方式存在的问题是,所有服务将全量的获取到所有远程调用的方法,但实际上可能并不需要这么多的方法。
当抽离后无法进行feign包扫描的时候,可以进行批量指定或者单个指定:
小总结:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧