8-Feign远程调用

简介与安装

RestTemplate方式存在的问题:
image
feign是声明式的,也就是制定规则后简单进行调用即可完成请求发送:
image

feign使用方式分三步:加入依赖,添加配置,添加声明:
image

远程调用

feign client表示针对哪个服务进行调用,http接口方法的参数与SpringMVC相同:
image

采用feign进行调用的语法如下:
image

小总结:
image

自定义日志配置

image

日志等级信息,默认是none,也就是没有日志:

  • basic:基本信息,发送时间/结束时间/耗时
  • headers:基本信息+请求头信息
  • full:基本信息+请求头信息+请求体+响应体

image

image

性能优化

feign虽然是声明式的远程调用,底层还是基于其他的框架来实现的远程调用。
性能优化主要从底层框架的选择可日志输出内容方面来进行:

image

以下将feign的连接方式更改为Apache HttpClient方式,因为这种方式支持连接池:

image
引入的依赖是可以直接使用的,从配置中对连接池进行配置即可。实际连接数的大小和连接池的大小要从压测来获得。

最佳实现方案

继承模式

消费者调用的接口方法和提供者的控制层接口是一样的,所以这两者应该可以提取成公共的父接口:
image
文中表示并不推荐此类方式,因为这种方式会导致耦合度过高的问题。

抽取模式

第二种优化方式:如果多个消费者都调用同一个服务,并且使用方式也是相同的,那就可以将远程调用的代码抽取成公用的依赖,依赖中还可以包含对实体类/配置等等的共用的内容,以简化每个客户端重复编码的问题,并制定统一的标准:
image
此类方式存在的问题是,所有服务将全量的获取到所有远程调用的方法,但实际上可能并不需要这么多的方法。
image
当抽离后无法进行feign包扫描的时候,可以进行批量指定或者单个指定:
image

小总结:
image

posted @   agoodjavaboy  阅读(299)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
点击右上角即可分享
微信分享提示