RPC框架之OpenFeign快速上手

RPC框架之OpenFeign快速上手

  • [1. 快速上手](#1. 快速上手)
  • [💖1.1 第一步 引入相关依赖](#💖1.1 第一步 引入相关依赖)
  • [🦖1.2 第二步 启用OpenFeign功能](#🦖1.2 第二步 启用OpenFeign功能)
  • [🦕1.3 第三步 编写FeignClient](#🦕1.3 第三步 编写FeignClient)
  • [🪼1.4 第四步 使用FeignClient 实现远程调用](#🪼1.4 第四步 使用FeignClient 实现远程调用)
  • [✨1.5 验证一下](#✨1.5 验证一下)
  • [🍕1.6 原理](#🍕1.6 原理)
  • [2. OpenFeign整合OkHttp步骤](#2. OpenFeign整合OkHttp步骤)
  • [💖2.1 第一步 引入相关依赖](#💖2.1 第一步 引入相关依赖)
  • [🦖 2.2 开启连接池功能](#🦖 2.2 开启连接池功能)

写个小demo练练手,这里只是用到rpc简单的调用,服务注册都没用,直接就是消费者通过url调用服务生产者

1. 快速上手

💖1.1 第一步 引入相关依赖

java 复制代码
<!--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

java 复制代码
/**
 * value:服务名(接口提供方的服务名)
 * url:手动指定@FeignClient调用的地址
 */
@Repository
@FeignClient(value = "item-service", url = "http://localhost:8081")
public interface ItemClient {
    @PostMapping("/item/hello")
    String hello();
}

服务生产者的服务名称

java 复制代码
server.port=8081
spring.application.name=item-service

🪼1.4 第四步 使用FeignClient 实现远程调用

java 复制代码
@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 第一步 引入相关依赖

在原有的基础上添加连接池相关依赖

java 复制代码
<!--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
相关推荐
JavaEdge.1 小时前
LangChain4j HTTP 客户端定制:解锁 LLM API 交互的更多可能性
网络·网络协议·http
Hy行者勇哥1 小时前
形象解释 HTTP 的四种常见请求方式及其中的区别联系
网络·网络协议·http
Cuit小唐1 小时前
TCP 协议:原理、机制与应用
网络·网络协议·tcp/ip
Arenaschi3 小时前
SQLite 是什么?
开发语言·网络·python·网络协议·tcp/ip
白帽Gavin3 小时前
SMB协议
网络协议
Gazer_S3 小时前
【HTTP通信:生活中的邮局之旅】
网络协议·http·生活
言之。3 小时前
【Go语言】RPC 使用指南(初学者版)
开发语言·rpc·golang
上海云盾-高防顾问4 小时前
高防IP+CDN组合:电商大促的“双保险”防护方案
网络·网络协议·tcp/ip
半路_出家ren5 小时前
流量抓取工具(wireshark)
网络·网络协议·测试工具·网络安全·wireshark·流量抓取工具
Gazer_S6 小时前
【HTTP/2:信息高速公路的革命】
网络·网络协议·http