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

发布于:2025-03-10 ⋅ 阅读:(19) ⋅ 点赞:(0)

目录

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功能

经测试,连接池更换成功