微服务中的Feign远程调用

Feign的个人理解

Feign在英文中是"装"的意思,但在微服务中他是远程调用的一种方式,我的理解是:他替代了RestTemplate+Nacos中的URL编码的方式,显得很高大上,所以很装:(声明式事务,只需要在Spring中把需要发请求的信息声明出来,剩下的交给"Feign装"帮你搞定)

Feign的使用

步骤很简单,首先我们需要引入依赖,然后再启动类上开启注解,编写Feign的客户端。部分代码对比:不难发现我们只需要少量的XXClient就可以替代大量的URL地址代码。

复制代码
<!--Feign的依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
复制代码
@Autowired
    private OrderMapper orderMapper;

    @Autowired
    private UserClient userClient;

    public Order queryOrderById(Long orderId) {
        // 1.查询订单
        Order order = orderMapper.findById(orderId);
        //2.利用UserClient发送请求
        User user = userClient.findById(order.getUserId());
        //3.封装user到order中去
        order.setUser(user);
        // 4.返回
        return order;
    }
    /*@Autowired
    private RestTemplate restTemplate;

    public Order queryOrderById(Long orderId) {
        // 1.查询订单
        Order order = orderMapper.findById(orderId);
        //2.利用RestTemplate发送请求
        String url = "http://userservice/user/"+order.getUserId();
        User user = restTemplate.getForObject(url, User.class);
        //3.封装user到order中去
        order.setUser(user);
        // 4.返回
        return order;
    }*/

再Feign的内部集成了Ribbon,所以不需要担心负载均衡的问题

除此之外Feign还给我们提供了许多默认配置,包括我们可以自定义的一些常用配置:

feign.Logger.Level中NONE:没有日志信息(默认),BASIC:Http请求的开始时间结束时间和持续时间等基本信息,HEADDERS:除了记录请求的基本信息之外还给你记录下请求头和响应头信息,FULL:记录所有的信息

修改配置文件来达到修改日志级别的效果和使用Java代码来实现修改日志级别的效果

方式二:注释掉方式一的前提下我们先创建一个config类:

然后我们可以选择不同的作用范围:作用在@FeignClient注解里面表示配置在当前服务器生效

作用在启动类上的@EnableFeignClients上代表作用在全局

以上的记录日志会消耗一定的性能。

自然而然我们也会有相应的性能优化:

主要是通过连接池的配置来实现的

还是老样子,我们首先要引入依赖,然后再配置文件中配置连接池

<!--httpClient的依赖 -->

<dependency>

<groupId>io.github.openfeign</groupId>

<artifactId>feign-httpclient</artifactId>

</dependency>

配置文件:

feign:

client:

config:

default: # default全局的配置

loggerLevel: BASIC # 日志级别,BASIC就是基本的请求和响应信息

httpclient:

enabled: true # 开启feign对HttpClient的支持

max-connections: 200 # 最大的连接数

max-connections-per-route: 50 # 每个路径的最大连接数

Feign的最佳实践:

第一种:继承(面向契约的思想,紧耦合)

第二种:抽取(松耦合,但相对可能会引入不需要的依赖)

具体实现:

相关推荐
吳所畏惧29 分钟前
Linux环境/麒麟V10SP3下离线安装Redis、修改默认密码并设置Redis开机自启动
linux·运维·服务器·redis·中间件·架构·ssh
会周易的程序员1 小时前
多模态AI 基于工业级编译技术的PLC数据结构解析与映射工具
数据结构·c++·人工智能·单例模式·信息可视化·架构
毕设源码-赖学姐1 小时前
【开题答辩全过程】以 高校人才培养方案管理系统的设计与实现为例,包含答辩的问题和答案
java
一起努力啊~1 小时前
算法刷题-二分查找
java·数据结构·算法
小途软件1 小时前
高校宿舍访客预约管理平台开发
java·人工智能·pytorch·python·深度学习·语言模型
J_liaty1 小时前
Java版本演进:从JDK 8到JDK 21的特性革命与对比分析
java·开发语言·jdk
零售ERP菜鸟2 小时前
当业务战略摇摆不定:在变化中锚定不变的IT架构之道
信息可视化·职场和发展·架构·创业创新·学习方法·业界资讯
+VX:Fegn08952 小时前
计算机毕业设计|基于springboot + vue律师咨询系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·课程设计
daidaidaiyu2 小时前
一文学习和实践 当下互联网安全的基石 - TLS 和 SSL
java·netty
MinggeQingchun2 小时前
业务架构、产品架构、应用架构、数据架构、技术架构和项目架构
架构