好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

maven grpc整合springboot demo

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

查看更多关于maven grpc整合springboot demo的详细内容...

  阅读:19次