当前位置:科学 > 正文

gRPC与SpringBoot集成

2023-03-17 19:50:13  来源:大仙儿聊编程



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>

4. gRPC Server端编码

服务端配置application.yaml:

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

服务端服务自动注册:

实现对应的gRPC服务后通过@GrpcService注解进行注册即可。

注:@GrpcService组合@Service注解


启动springboot应用后即可自动暴露gRPC端口及服务。

5. gRPC Client端编码

客户端配置application.yaml:

server:  port: 8080spring:  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

客户端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文件内容如下:


如上图中的

即为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文件内容如下:


如上图中的

即为gRPC Client端启动的主要配置类,

gRPC Client端配置属性类参见:GrpcChannelsProperties


首先扫描所有@GrpcClient修饰的field和set方法,生成对应的gRPC Stub注入。


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

根据@GrpcClient.value对应的grpc.client.{name}对应服务端配置创建channel根据field类型生成对应的gRPC stub对象



创建GrpcChannelFactory。




参考:

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



点击关注,带你了解更多

关键词:

推荐阅读

飞机发明者是谁?飞机有哪些类型?

飞机发明者是谁?飞机是由莱特兄弟发明的,莱特兄弟是美国著名的发明家,他们的哥哥是威尔伯菜特,他们的弟弟是奥维尔莱特。1903年12月17日 【详细】

Google I/O线上开发者大会发布 安卓12新特性支持什么功能?

现在大多数人用的手机还是安卓机,本次Android 12的发布自然也是引起了一大波的关注,国内不少厂商也参与了测试,我们来看看谷歌正式发布A 【详细】

航天员出舱七个小时怎么喝水?太空行走的危险和好处是什么?

航天员出舱七个小时怎么喝水?7月4日,中国宇航员刘伯明和汤洪波出航活动,整个进程持续了7个多小时。据报道,宇航员在舱外服里有饮水袋,在 【详细】

NASA毅力号录下了来自火星的声音 毅力号录下了来自火星的声音怎么回事?

NASA毅力号录下了来自火星的声音近日,有报道称,NASA毅力号录下了来自火星的声音,这非常的奇妙,相信大家十分的感兴趣,下面一起去看看吧 【详细】

北京上空现三个太阳 古代幻日现象预兆什么?

北京上空现三个太阳北京上空现三个太阳 专家释疑今日登上热搜,主要是在12月29日有网友拍到北京上空出现了三个太阳。对于这一现象气象专家 【详细】

关于我们  |  联系方式  |  免责条款  |  招聘信息  |  广告服务  |  帮助中心

联系我们:85 572 98@qq.com备案号:粤ICP备18023326号-40

科技资讯网 版权所有