微服务中的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的最佳实践:

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

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

具体实现:

相关推荐
别动我齐刘海8 小时前
C++ 工程化学习
java·linux·前端·c++·学习·机器学习·机器人
loulanyue_8 小时前
从个人提效到团队可验证交付:中宏保险AI Coding流水线重塑与Qoder实战——读中宏保险AI架构总监王志宇2026云栖专场演讲
人工智能·架构
code2cat9 小时前
Java进阶篇之AtomicLongFieldUpdater:把累计额度留在对象字段中
java·cas·并发编程
WeiXin_DZbishe9 小时前
基于springboot城市公交实时运营与调度系统-计算机毕设 附源码【课程设计】66173
java·vue.js·spring boot·后端·python·php·课程设计
泡茶喝茶写代码9 小时前
A股量化数据工程:从 REST 接口到策略信号(第 18 篇):放量缩量异动扫描
java·python·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
wewowilling10 小时前
认识微服务
java·运维·微服务·springcloud
Erishen10 小时前
Lume C11编译器内部架构:从树形解释器到双LLVM后端的设计之旅
架构·开源·编译器
代码什么用10 小时前
Java Web 7-10
java·servlet
沪上企服通10 小时前
历史账套科目重映射与规则版本重算:旧账梳理的“口径复位”工程
笔记·架构