当前位置: 首页> 财经> 访谈 > Springboot集成GRPC

Springboot集成GRPC

时间:2025/7/9 3:23:46来源:https://blog.csdn.net/qq_31564573/article/details/139119789 浏览次数:0次

Springboot集成GRPC

  • 一、springboot版本
  • 二、GRPC的pom依赖
    • 2.1 服务端
    • 2.2 客户端
    • 3.构建依赖
  • 三、配置文件
    • 服务端
    • 客户端
  • 四、 demo
    • 4.1 编写proto文件
    • 4.2 生成文件
    • 4.3 服务端重写方法
    • 4.4 客户端调用该方法
  • 五、测试

一、springboot版本

        <groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.3.RELEASE</version>

二、GRPC的pom依赖

2.1 服务端

        <grpc.version>1.51.0</grpc.version><dependencies><!-- gRPC 依赖 --><dependency><groupId>io.grpc</groupId><artifactId>grpc-netty-shaded</artifactId><version>${grpc.version}</version></dependency><dependency><groupId>io.grpc</groupId><artifactId>grpc-core</artifactId><version>${grpc.version}</version></dependency><dependency><groupId>io.grpc</groupId><artifactId>grpc-api</artifactId><version>${grpc.version}</version></dependency><dependency><groupId>io.grpc</groupId><artifactId>grpc-protobuf</artifactId><version>${grpc.version}</version></dependency><dependency><groupId>io.grpc</groupId><artifactId>grpc-stub</artifactId><version>${grpc.version}</version></dependency><dependency><groupId>net.devh</groupId><artifactId>grpc-server-spring-boot-starter</artifactId><version>2.14.0.RELEASE</version></dependency><dependency><groupId>com.google.protobuf</groupId><artifactId>protobuf-bom</artifactId><version>3.21.9</version><type>pom</type></dependency><dependency><groupId>com.google.protobuf</groupId><artifactId>protobuf-java</artifactId><version>3.21.9</version></dependency><!-- https://mvnrepository.com/artifact/com.google.protobuf/protoc --><dependency><groupId>com.google.protobuf</groupId><artifactId>protoc</artifactId><version>3.21.9</version><type>pom</type></dependency></dependencies>

2.2 客户端

        <grpc.version>1.51.0</grpc.version><dependencies><!-- gRPC 依赖 --><dependency><groupId>io.grpc</groupId><artifactId>grpc-netty-shaded</artifactId><version>${grpc.version}</version></dependency><dependency><groupId>io.grpc</groupId><artifactId>grpc-core</artifactId><version>${grpc.version}</version></dependency><dependency><groupId>io.grpc</groupId><artifactId>grpc-api</artifactId><version>${grpc.version}</version></dependency><dependency><groupId>io.grpc</groupId><artifactId>grpc-protobuf</artifactId><version>${grpc.version}</version></dependency><dependency><groupId>io.grpc</groupId><artifactId>grpc-stub</artifactId><version>${grpc.version}</version></dependency><!-- grpc 客户端 --><dependency><groupId>net.devh</groupId><artifactId>grpc-client-spring-boot-starter</artifactId><version>2.14.0.RELEASE</version></dependency><dependency><groupId>com.google.protobuf</groupId><artifactId>protobuf-bom</artifactId><version>3.21.9</version><type>pom</type></dependency><dependency><groupId>com.google.protobuf</groupId><artifactId>protobuf-java</artifactId><version>3.21.9</version></dependency><!-- https://mvnrepository.com/artifact/com.google.protobuf/protoc --><dependency><groupId>com.google.protobuf</groupId><artifactId>protoc</artifactId><version>3.21.9</version><type>pom</type></dependency></dependencies>

3.构建依赖

 <build><!--grpc proto文件编译插件--><extensions><extension><groupId>kr.motd.maven</groupId><artifactId>os-maven-plugin</artifactId><version>1.6.2</version></extension></extensions><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><!--grpc proto文件编译插件--><plugin><groupId>org.xolstice.maven.plugins</groupId><artifactId>protobuf-maven-plugin</artifactId><version>0.6.1</version><configuration><!-- 设置 protoc 的版本 --><protocArtifact>com.google.protobuf:protoc:3.12.0:exe:${os.detected.classifier}</protocArtifact><!-- 设置插件的版本 --><pluginId>grpc-java</pluginId><pluginArtifact>io.grpc:protoc-gen-grpc-java:1.34.1:exe:${os.detected.classifier}</pluginArtifact><!-- 设置输出目录 --><outputDirectory>${project.basedir}/src/main/java</outputDirectory><!-- 设置proto文件所在目录 --><protoSourceRoot>${project.basedir}/src/main/resources</protoSourceRoot><!-- 是否清除输出目录 --><clearOutputDirectory>false</clearOutputDirectory></configuration><executions><execution><goals><!-- 执行 protobuf 编译和 gRPC 插件 --><goal>compile</goal><goal>compile-custom</goal></goals></execution></executions></plugin></plugins></build>

三、配置文件

服务端

  1. 配置grpc的端口号即可,不配默认端口号是9090.
    在这里插入图片描述

客户端

yaml配置:

# grpc配置
grpc:# grpc clienT相关配置client:# 服务名(不同服务名可对应不同配置)# ms-zeu是服务端配置的名字,GrpcClient注解会用到ms-zeus:#       gRPC服务端地址#      address: 'dns://127.0.0.1:19898'address: 'static://127.0.0.1:19090'# 是否开启保持连接(长连接)enableKeepAlive: true# 保持连接时长(默认20s)keepAliveTimeout: 20s# 没有RPC调用时是否保持连接(默认false,可禁用避免额外消耗CPU)keepAliveWithoutCalls: false# 客户端负载均衡策略(round_robin(默认), pick_first)defaultLoadBalancingPolicy: round_robin# 通信类型# plaintext | plaintext_upgrade | tls# 明文通信且http/2 | 明文通信且升级http/1.1为http/2 | 使用TLS(ALPN/NPN)通信negotiationType: plaintext

如下图所示:
在这里插入图片描述

四、 demo

4.1 编写proto文件

eg:

// proto 文件放在 src/main/proto 目录下
// 指定使用 proto3 语法
syntax = "proto3";option java_generic_services = true;
// 生成的 Java 代码将被拆分为多个文件
option java_multiple_files = true;
// 指定生成的 Java 代码所在的包
option java_package = "cn.zqm.api";// 定义接口
service Greeter {// 定义方法rpc SayHello (HelloRequest) returns (HelloReply) {}
}// 定义入参格式
message HelloRequest {string name = 1;
}// 定义出参格式
message HelloReply {string data;string message = 1;int32 code; 
}

proto3语法详情见:

4.2 生成文件

点击api中的compile,自动生成右侧的jar包。
客户端和服务端同时生成。
在这里插入图片描述

4.3 服务端重写方法

@Service
public class HelloService {//和本项目中配置文件名一致即可@GrpcClient("ms-zeus")private GreeterGrpc.GreeterBlockingStub simpleStub;public void testHello(){HelloRequest helloRequest = HelloRequest.newBuilder().setName("1").build();HelloReply helloReply = simpleStub.sayHello(helloRequest);System.out.println();}
}

在这里插入图片描述

4.4 客户端调用该方法

@Service
public class HelloService {//和本项目中配置文件名一致即可@GrpcClient("ms-zeus")private GreeterGrpc.GreeterBlockingStub simpleStub;public void testHello(){HelloRequest helloRequest = HelloRequest.newBuilder().setName("1").build();HelloReply helloReply = simpleStub.sayHello(helloRequest);System.out.println();}
}

在这里插入图片描述

五、测试

编写http接口进行测试:
在这里插入图片描述

结果应该是我们自定义生成的hello。

在这里插入图片描述

验证成功!!!!

关键字:Springboot集成GRPC

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: