目录
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功能
经测试,连接池更换成功