Springboot集成GRPC

Springboot集成GRPC

码农世界 2024-05-30 后端 97 次浏览 0个评论

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
                                  
                              
                          
                      
                  
              
          

          三、配置文件

          服务端

          1. 配置grpc的端口号即可,不配默认端口号是9090.

            Springboot集成GRPC

          客户端

          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
          

          如下图所示:

          Springboot集成GRPC

          四、 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包。

          客户端和服务端同时生成。

          Springboot集成GRPC

          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();
              }
          }
          

          Springboot集成GRPC

          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();
              }
          }
          

          Springboot集成GRPC

          五、测试

          编写http接口进行测试:

          Springboot集成GRPC

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

          Springboot集成GRPC

          验证成功!!!!

转载请注明来自码农世界,本文标题:《Springboot集成GRPC》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,97人围观)参与讨论

还没有评论,来说两句吧...

Top