前言
他来了他来了,停了快2个月了终于又开始更新文章啦,这次带来的绝对是干货!!!。由于公司项目进行重构的时候考虑到,OpenFeign做为服务通信组件在高并发情况下有一定的性能瓶颈,所以将其替换为更高性能的通信组件Grpc,Grpc也是业界比较流行的服务通信组件,底层采用HTTP/2进行网络通信性能上高于基于Http/1.1的OpenFeign。 我将把Grpc的整合过程整理成文字分享给大家,喜欢请三连!!!,你的鼓励是我坚持下去的动力。
认识Grpc
OpenFeign基于 HTTP/1.1 协议。主要使用 JSON 或 XML 格式进行数据交换,这些格式更加人性化但分装臃肿效率较低。其主要用于 RESTful API 调用,支持声明式的 Web 服务客户端。
而 gRPC 是一个高性能、开源和通用的 RPC(远程过程调用)框架,基于 Protocol Buffers 序列化协议开发,在内部实现上,它采用了 HTTP/2 协议作为传输层协议的一部分来实现高效的双向流通信的能力等特性让它成为很多开发者热衷的工具库之一;gRPC 在处理大量数据时表现优异,适用于需要快速响应的应用场景,特别是在微服务架构中。
gRPC:
- 强调高效的数据传输和低延迟通信。如金融交易、在线游戏等对延迟要求极高的场景
- 适合构建高性能的分布式系统和服务间通信。在大规模微服务架构中,gRPC 可以显著提高系统的整体性能。
- 支持流式传输,可以实现长连接和实时数据推送。
OpenFeign:
- 注重简化开发者的代码编写工作。
- 更加灵活,可以轻松地集成到现有的 Spring Boot 项目中。
- 适用于轻量级的 RESTful API 调用。
总结来说,gRPC 和 OpenFeign 各有优势,选择哪种技术取决于具体的业务需求和技术栈。如果你需要高性能、低延迟的服务间通信,gRPC 是更好的选择;如果你希望简化开发流程并快速集成 RESTful API,OpenFeign 则更为合适。
案例实战
1.搭建工程
首先搭建一个SpringBoot父工程,父工程下分别有:grpc-api ,grpc-provider ,grpc-consumer 三个模块,分别代表:Grpc接口,生产者,消费者。父工程管理的依赖如下
<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>21</java.version>
<skipTests>true</skipTests>
<spring-cloud.version>2023.0.1</spring-cloud.version>
<spring-cloud-alibaba.version>2023.0.1.0</spring-cloud-alibaba.version>
<hutool.version>5.8.28</hutool.version>
<lombok.version>1.18.32</lombok.version>
</properties>
<!--SpringBoot依赖-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.0</version>
</parent>
<dependencies>
<!-- 常用工具类 -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<scope>provided</scope>
</dependency>
<!--SpringCloud 20