1. 说明
GRPC基于protobuf来定义接口。分为server端和client端。其中server端提供接口实现,client通过调用server端接口从而获取期望数据。
2. 公共部分
2.1 添加依赖
1
2
3
4
5
6
7
8
9
10
|
< dependency > < groupId >net.devh</ groupId > < artifactId >grpc-spring-boot-starter</ artifactId > < version >2.12.0.RELEASE</ version > </ dependency > < dependency > <!-- Java 9+ compatibility --> < groupId >javax.annotation</ groupId > < artifactId >javax.annotation-api</ artifactId > </ dependency > |
添加插件(注意:如果wagon-provider-api无法自动引入,可以现在依赖中引入,以便于依赖的下载,然后在删除依赖坐标即可)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
< plugin > <!-- protobuf生成插件--> < groupId >org.xolstice.maven.plugins</ groupId > < artifactId >protobuf-maven-plugin</ artifactId > < version >0.6.1</ version > < configuration > < protocArtifact >com.google.protobuf:protoc:3.17.3:exe:${os.detected.classifier} </ protocArtifact > < pluginId >grpc-java</ pluginId > < pluginArtifact >io.grpc:protoc-gen-grpc-java:1.39.0:exe:${os.detected.classifier} </ pluginArtifact > <!--默认值--> < protoSourceRoot >${project.basedir}/src/main/proto</ protoSourceRoot > < outputDirectory >${project.basedir}/src/main/java</ outputDirectory > < clearOutputDirectory >false</ clearOutputDirectory > </ configuration > < executions > < execution > < goals > < goal >compile</ goal > < goal >compile-custom</ goal > </ goals > </ execution > </ executions > </ plugin > |
2.2 添加proto依赖文件
添加目录src/main/proto
,并将目录设置为Source Root
,然后在目录src/main/proto
下添加文件hello.proto
,内容如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
syntax = "proto3" ; //指定proto版本 package com.server; // 生成的Java代码的包名 option java_package = "com.grpc.server" ; // 请求参数 message HelloReq{ string name = 1 ; } // 返回参数 message HelloResp{ string ret = 1 ; } // rpc service service HelloService{ // service中需要进行调用的具体方法 rpc hello(HelloReq) returns (HelloResp){} } |
2.3 通过protobuf生成Java代码
插件导入成功后,点击下图选中的protobuf:compile
和protbuf:compile-custom
依次生成对应的Java代码(也就是接口依赖代码)
3. server端接口具体实现
service代码如下
1
2
3
4
5
6
7
8
9
10
11
|
import io.grpc.stub.StreamObserver; import net.devh.boot.grpc.server.service.GrpcService; @GrpcService public class HelloService extends HelloServiceGrpc.HelloServiceImplBase { @Override public void hello(Hello.HelloReq request, StreamObserver<Hello.HelloResp> responseObserver) { Hello.HelloResp resp = Hello.HelloResp.newBuilder().setRet( "你好-->" +request.getName()).build(); responseObserver.onNext(resp); responseObserver.onCompleted(); } } |
4 client端接口具体实现
client端测试调用代码如下
1
2
3
4
5
6
7
8
9
10
11
12
|
import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest public class GrpcTest { @Autowired private HelloSerivce helloSerivce; @Test public void test1() throws Exception{ helloSerivce.haha( "牛哈哈" ); } } |
以上就是maven grpc整合springboot demo的详细内容,更多关于maven grpc整合springboot 的资料请关注服务器之家其它相关文章!
原文链接:https://blog.csdn.net/seven_zhao/article/details/119033707