RPC框架之OpenFeign快速上手
- 1. 快速上手
- 💖1.1 第一步 引入相关依赖
- 🦖1.2 第二步 启用OpenFeign功能
- 🦕1.3 第三步 编写FeignClient
- 🪼1.4 第四步 使用FeignClient 实现远程调用
- ✨1.5 验证一下
- 🍕1.6 原理
- 2. OpenFeign整合OkHttp步骤
- 💖2.1 第一步 引入相关依赖
- 🦖 2.2 开启连接池功能
写个小demo练练手,这里只是用到rpc简单的调用,服务注册都没用,直接就是消费者通过url调用服务生产者
1. 快速上手
💖1.1 第一步 引入相关依赖
<!--OpenFeign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>3.1.4</version>
</dependency>
<!--负载均衡组件-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
<version>3.1.4</version>
</dependency>
🦖1.2 第二步 启用OpenFeign功能
在项目启动类上添加注解 @EnableFeignClients
🦕1.3 第三步 编写FeignClient
/**
* value:服务名(接口提供方的服务名)
* url:手动指定@FeignClient调用的地址
*/
@Repository
@FeignClient(value = "item-service", url = "http://localhost:8081")
public interface ItemClient {
@PostMapping("/item/hello")
String hello();
}
服务生产者的服务名称
server.port=8081
spring.application.name=item-service
🪼1.4 第四步 使用FeignClient 实现远程调用
@RestController
public class OrderController {
@Autowired
private ItemClient itemClient;
@PostMapping("/hello")
public String printMsg(){
return itemClient.hello();
}
}
✨1.5 验证一下
🍕1.6 原理
OpenFeign 是一个基于注解的声明式 HTTP 客户端,它简化了服务间的 HTTP 调用。它是在 Spring Cloud 生态系统中广泛使用的组件之一。
OpenFeign 的原理可以简要概括为以下几个步骤:
-
定义接口:使用 Java 接口的方式定义需要调用的服务接口。在接口的方法上使用注解来描述请求的相关信息,如请求方法、URL、请求参数等。
-
生成代理:在应用程序启动时,OpenFeign 根据接口的定义和注解信息生成一个动态代理对象。
-
发起请求:当应用程序调用接口的方法时,实际上是调用了生成的代理对象的方法。代理对象根据注解信息构建 HTTP 请求,并将请求发送到目标服务。
-
处理响应:目标服务接收到请求后处理,并返回响应。代理对象将接收到的响应转换为方法返回的数据类型,并返回给应用程序。
OpenFeign 的核心原理是使用动态代理技术,通过在运行时动态生成代理对象来实现服务间的 HTTP 调用。它通过解析接口上的注解信息,生成对应的 HTTP 请求,并将请求发送到目标服务。同时,OpenFeign 还提供了负载均衡、请求重试、容错等功能,以提高服务调用的可靠性和稳定性。
👍总结起来,OpenFeign 的原理是通过动态代理技术生成代理对象,解析注解信息构建 HTTP 请求,并处理响应,从而简化了服务间的 HTTP 调用过程。
2. OpenFeign整合OkHttp步骤
HTTP 连接池
在HTTP 通信的过程中,建立连接是一个很复杂的过程,涉及到多个数据包的交换,很耗时间,而且HTTP连接需要3
次握手和4
次挥手开销都很大
。
这时可以采用HTTP连接池
,节约大量的3次握手4次挥手时间,提升吞吐量。
默认的HttpURLConnection
是JDK自带的,并不支持
连接池,如果要实现连接池的机制,还需要自己来管理连接对象。
-
HttpClient
相比传统JDK自带的HttpURLConnection,它封装了访问HTTP的请求头,参数,内容体,响应等等。它不仅使客户端发送HTTP请求变得容易,而且也方便了开发人员测试接口(基于HTTP协议的),既提高了开发的效率,又提高了代码的健壮性。另外高并发大量的请求网络的时候,也是用"连接池"
提升吞吐量。 -
OkHttp
作为后期之秀,功能和性能上,可能稍优于HttpClient ,但是几乎没多大区别,实际使用时,都是可以的,不过HttpClient集成起来更方便。
原文链接:https://blog.csdn.net/qq_43437874/article/details/122169675
💖2.1 第一步 引入相关依赖
在原有的基础上添加连接池相关依赖
<!--OpenFeign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>3.1.4</version>
</dependency>
<!--负载均衡组件-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
<version>3.1.4</version>
</dependency>
<!--连接池-->
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-okhttp</artifactId>
<version>10.12</version>
</dependency>
🦖 2.2 开启连接池功能
# 开启OkHttp 连接池
feign.okhttp.enabled=true