当前位置: 首页 > article >正文

OpenFeign:优雅实现微服务远程调用

目录

OpenFeign介绍

OpenFeign优势

OpenFeign使用

OpenFeign连接池


OpenFeign介绍

OpenFeign 是一个声明式的Web服务客户端,简化了微服务间的HTTP调用。它通过注解方式定义接口和请求方法,自动实现服务间通信的细节,支持负载均衡、错误重试等功能,使得编写分布式应用变得更加容易。主要用于Spring Cloud项目中,增强服务调用的灵活性与可维护性。

OpenFeign优势

虽然我们之前采用RestTemplate实现了服务的远程调用,但是这个相较于OpenFeign有许多不足。

以下是OpenFeign的优点:

1.代码简单:通过声明式的接口定义方式,只需定义接口和方法签名,OpenFeign 自动处理底层的通信细节,使得代码更加简洁、清晰

2.负载均衡:置了对 Ribbon 的集成,能够自动实现客户端负载均衡

3.错误处理与重试机制:提供了更简便的错误处理机制,并且可以通过简单的配置实现自动重试

4.维护便利:采用接口定义的方式,提高了代码的可读性,便于维护和扩展

OpenFeign使用

在微服务模块引入依赖

  <!--openFeign-->
  <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-openfeign</artifactId>
  </dependency>
  <!--负载均衡器-->
  <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-loadbalancer</artifactId>
  </dependency>

在对应微服务模块启动类上添加注解,启动OpenFeign功能:

编写OpenFeign客户端

@FeignClient(value = "user-service")
public interface UserClient {

    @PutMapping("/user/money/deduct")
    void deductMoney(
            @RequestParam("pw") String pw,
            @RequestParam("amount") Integer amount);
}

可以在对应服务进行远程调用

根据swagger框架测试,测试成功

OpenFeign连接池

OpenFeign 默认使用的是 Java 的 HttpURLConnection 进行 HTTP 请求的发送,在高并发场景下,直接使用 HttpURLConnection 可能会遇到性能瓶颈或资源管理问题。

所以我们需要更换连接池,更换成feign-okhttp。

引入依赖

<!--OK http 的依赖 -->
<dependency>
  <groupId>io.github.openfeign</groupId>
  <artifactId>feign-okhttp</artifactId>
</dependency>

在application.yml配置文件中开启Feign的连接池功能:

feign:
  okhttp:
    enabled: true # 开启OKHttp功能

经测试,连接池更换成功


http://www.kler.cn/a/578621.html

相关文章:

  • 【Linux网络】NAT技术、DNS系统、五种IO模型
  • UE5 AssetManager类使用详解
  • 基于大模型之力,重构 AI 数字化销售版图
  • WOA-Transformer鲸鱼算法优化编码器时间序列预测(Matlab实现)
  • 单细胞分析(22)——高效使用 Cell Ranger:安装、参数解析及 Linux 后台运行指南
  • ClassUtil:Hutool库中反射操作的高效利器
  • 爬虫案例七Python协程爬取视频
  • c#面试题整理4
  • STM32DMA串口传输实验(标准库)
  • 本地搭建DeepSeek R1模型 + 前端
  • MySQL 表的字段数量和单行存储容量受存储引擎、数据类型、行结构等多因素限制
  • ORB-SLAM2源码学习(六):相机跟踪(局部地图跟踪和关键帧创建)
  • 【向量模型】 开源通用向量模型BGE (BAAI General Embedding)
  • Vue代理与Vuex模块化学习
  • 环形链表问题的探究与代码实现
  • 【论文精读】GaussReg: Fast 3D Registration with Gaussian Splatting
  • MyBatis SQL 映射文件的作用和结构
  • Java 大视界 -- Java 大数据在智能体育赛事运动员表现分析与训练优化中的应用(122)
  • 忘记dedecms后台超级管理员账号和密码的解决方案
  • crewai框架出现SSLError