gRPC与SpringBoot集成



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依赖



    net.devh
    grpc-spring-boot-starter
    2.13.1.RELEASE

4. gRPC Server端编码

服务端配置application.yaml:

spring:
  application:
    name: grpc-sb-server
grpc:
  # grpc server相关配置
  server:
    # 启动端口
    port: 9898

服务端服务自动注册:

实现对应的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

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端。



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,然后:



创建GrpcChannelFactory。




参考:

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


作者:罗小爬EX

来源:https://blog.csdn.net/luo15242208310/article/details/122805375


点击关注,带你了解更多

展开阅读全文

页面更新:2024-05-20

标签:明文   注解   示例   服务端   源码   客户端   属性   定义   代码   通信

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top