RPC框架之OpenFeign快速上手

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

RPC框架之OpenFeign快速上手_第1张图片

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 验证一下

RPC框架之OpenFeign快速上手_第2张图片

1.6 原理

OpenFeign 是一个基于注解的声明式 HTTP 客户端,它简化了服务间的 HTTP 调用。它是在 Spring Cloud 生态系统中广泛使用的组件之一。

OpenFeign 的原理可以简要概括为以下几个步骤:

  • 定义接口:使用 Java 接口的方式定义需要调用的服务接口。在接口的方法上使用注解来描述请求的相关信息,如请求方法、URL、请求参数等。

  • 生成代理:在应用程序启动时,OpenFeign 根据接口的定义和注解信息生成一个动态代理对象。

  • 发起请求:当应用程序调用接口的方法时,实际上是调用了生成的代理对象的方法。代理对象根据注解信息构建 HTTP 请求,并将请求发送到目标服务。

  • 处理响应:目标服务接收到请求后处理,并返回响应。代理对象将接收到的响应转换为方法返回的数据类型,并返回给应用程序。

OpenFeign 的核心原理是使用动态代理技术,通过在运行时动态生成代理对象来实现服务间的 HTTP 调用。它通过解析接口上的注解信息,生成对应的 HTTP 请求,并将请求发送到目标服务。同时,OpenFeign 还提供了负载均衡、请求重试、容错等功能,以提高服务调用的可靠性和稳定性。

总结起来,OpenFeign 的原理是通过动态代理技术生成代理对象,解析注解信息构建 HTTP 请求,并处理响应,从而简化了服务间的 HTTP 调用过程。

RPC框架之OpenFeign快速上手_第3张图片

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

你可能感兴趣的:(rpc,网络协议,springcloud)