当前位置:   article > 正文

gRPC与SpringBoot集成_grpc-spring-boot-starter

grpc-spring-boot-starter

1. gRPC SpringBoot选型

gRPC官方并未提供gRPC Spring Boot的相关代码库,
在github中搜索grpc spring boot,最受欢迎的代码库如下图:
在这里插入图片描述
选择第一个开源仓库https://github.com/yidongnan/grpc-spring-boot-starter
该代码库由国人大神创建,并附有中文文档

接下来介如何集成该grpc-spring-boot-starter,
本文讲解的示例源码可参见:https://gitee.com/luoex/grpc-demo - grpc-spring-boot模块

2. 基础依赖

本示例依赖之前文章《gRPC Java入门示例》中的proto定义及基础代码,即源码中的grpc-base模块。

3. maven依赖

<!-- gRPC springboot依赖(包含grpc-server-spring-boot-starter、grpc-client-spring-boot-starter)-->
<dependency>
    <groupId>net.devh</groupId>
    <artifactId>grpc-spring-boot-starter</artifactId>
    <version>2.13.1.RELEASE</version>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

4. gRPC Server端编码

服务端配置application.yaml:

spring:
  application:
    name: grpc-sb-server
grpc:
  # grpc server相关配置
  server:
    # 启动端口
    port: 9898
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

服务端服务自动注册:
实现对应的gRPC服务后通过@GrpcService注解进行注册即可。
注:@GrpcService组合@Service注解
在这里插入图片描述
启动springboot应用后即可自动暴露gRPC端口及服务。

5. gRPC Client端编码

客户端配置application.yaml:

server:
  port: 8080
spring:
  application:
    name: grpc-sb-client

# grpc配置
grpc:
  # grpc clienT相关配置
  client:
    # 服务名(不同服务名可对应不同配置)
    grpc-sb-server:
      # 服务端地址
      address: 'static://127.0.0.1:9898'
      # 是否开启保持连接(长连接)
      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
  • 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
  • 26

Channels 的属性都是以 grpc.client.{name}. 或 grpc.client.{name}.security. 为前缀,
如上例配置中的grpc-sb-server即对应{name}
Channel 的名称{name}从 @GrpcClient 注解属性value中获取。
如果您想要配置一些其他的选项,如为所有服务端设置可信证书,并可以使用GLOBAL作为全局默认名称
单个 channel 的属性配置会覆盖全局配置。

客户端stub自动注入:
通过@GrpcClient即可自动注入对应的Stub,
@GrpcClient.value即对应配置文件中的Channel名称{name}
即对应application.yaml中的grpc.client.grpc-sb-server下的配置。
在这里插入图片描述

启动springboot应用后即可自动创建gRPC服务的stub客户端。

6. grpc-spring-boot-starter源码分析

结合开源仓库https://github.com/yidongnan/grpc-spring-boot-starter源码,
看看gRPC Server端和Client端是如何在springboot中集成启动的。

6.1 grpc-server-spring-boot-starter启动过程

查看maven依赖可以发现grpc-spring-boot-starter依次引入:
-> grpc-server-spring-boot-starter -> grpc-server-spring-boot-autoconfigure
在这里插入图片描述
查看grpc-server-spring-boot-autoconfigure的spring.factories文件内容如下:
在这里插入图片描述
如上图中的
net.devh.boot.grpc.server.autoconfigure.GrpcServerAutoConfiguration
net.devh.boot.grpc.server.autoconfigure.GrpcServerFactoryAutoConfiguration
即为gRPC Server端的服务注册及启动的主要配置类,

gRPC Server端配置属性类参见:GrpcServerProperties
在这里插入图片描述

首先扫描所有@GrpcService注解修饰的服务实现类定义,生成GrpcServiceDiscoverer。
在这里插入图片描述
在这里插入图片描述

然后生成ShadedNettyGrpcServerFactory,factory包含所有@GrpcService服务定义及配置属性
在这里插入图片描述

最后注册GrpcServerLifecycle,即通过spring lifecycle自动启动gRPC Server端。
在这里插入图片描述
在这里插入图片描述

  • ➡️ GrpcServerLifecycle.start ➡️ createAndStartGrpcServer
    • ➡️GrpcServerFactory.createServer
    • ➡️ AbstractGrpcServerFactory.configure
      • ➡️ configureServcies

在这里插入图片描述
在这里插入图片描述

6.2 grpc-client-spring-boot-starter启动过程

查看maven依赖可以发现grpc-spring-boot-starter依次引入:
-> grpc-client-spring-boot-starter -> grpc-client-spring-boot-autoconfigure
在这里插入图片描述
查看grpc-client-spring-boot-autoconfigure的spring.factories文件内容如下:
在这里插入图片描述

如上图中的
net.devh.boot.grpc.client.autoconfigure.GrpcClientAutoConfiguration
即为gRPC Client端启动的主要配置类,

gRPC Client端配置属性类参见:GrpcChannelsProperties
在这里插入图片描述

首先扫描所有@GrpcClient修饰的field和set方法,生成对应的gRPC Stub注入。
在这里插入图片描述

通过反射获取@GrpcClient修饰的field,然后:

  • 根据@GrpcClient.value对应的grpc.client.{name}对应服务端配置创建channel
  • 根据field类型生成对应的gRPC stub对象
    在这里插入图片描述
    在这里插入图片描述
    创建GrpcChannelFactory。
    在这里插入图片描述
    ➡️GrpcBeanPostProcessor.processInjectionPoint ➡️ AbstractChannelFactory.createChannel
    • ➡️ newManagedChannel ➡️ newChannelBuilder
      • ➡️ ShadedNettyChannelFactory.newChannelBuilder

在这里插入图片描述


参考:
https://github.com/yidongnan/grpc-spring-boot-starter

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/145930
推荐阅读
相关标签
  

闽ICP备14008679号