Springboot集成GRPC
- 一、springboot版本
- 二、GRPC的pom依赖
- 2.1 服务端
- 2.2 客户端
- 3.构建依赖
- 三、配置文件
- 服务端
- 客户端
- 四、 demo
- 4.1 编写proto文件
- 4.2 生成文件
- 4.3 服务端重写方法
- 4.4 客户端调用该方法
- 五、测试
一、springboot版本
org.springframework.boot spring-boot-starter-parent 2.1.3.RELEASE 二、GRPC的pom依赖
2.1 服务端
1.51.0 io.grpc grpc-netty-shaded ${grpc.version} io.grpc grpc-core ${grpc.version} io.grpc grpc-api ${grpc.version} io.grpc grpc-protobuf ${grpc.version} io.grpc grpc-stub ${grpc.version} net.devh grpc-server-spring-boot-starter 2.14.0.RELEASE com.google.protobuf protobuf-bom 3.21.9 pom com.google.protobuf protobuf-java 3.21.9 com.google.protobuf protoc 3.21.9 pom 2.2 客户端
1.51.0 io.grpc grpc-netty-shaded ${grpc.version} io.grpc grpc-core ${grpc.version} io.grpc grpc-api ${grpc.version} io.grpc grpc-protobuf ${grpc.version} io.grpc grpc-stub ${grpc.version} net.devh grpc-client-spring-boot-starter 2.14.0.RELEASE com.google.protobuf protobuf-bom 3.21.9 pom com.google.protobuf protobuf-java 3.21.9 com.google.protobuf protoc 3.21.9 pom 3.构建依赖
kr.motd.maven os-maven-plugin 1.6.2 org.springframework.boot spring-boot-maven-plugin org.xolstice.maven.plugins protobuf-maven-plugin 0.6.1 com.google.protobuf:protoc:3.12.0:exe:${os.detected.classifier} grpc-java io.grpc:protoc-gen-grpc-java:1.34.1:exe:${os.detected.classifier} ${project.basedir}/src/main/java ${project.basedir}/src/main/resources false compile compile-custom 三、配置文件
服务端
客户端
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。
验证成功!!!!
还没有评论,来说两句吧...