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依赖
<!-- 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日有网友拍到北京上空出现了三个太阳。对于这一现象气象专家 【详细】
相关新闻
- gRPC与SpringBoot集成
- 全球时讯:6G全息通信五大应用场景
- 沃尔玛、亚马逊退款、撸货、撸卡成功率低需要解决的底层环境问题
- AI智能写作用boardmix,文案、论文、爆款、小说一键生成!
- 计算机科学与技术就业方向(计算机科学与技术专业就业方向)
- 网络革命:互联网带来的危险_世界聚看点
- 【热闻】百度版ChatGPT,有点太着急了
- 小鹏汽车发布2022年第四季度财报:营收51.4亿元,净亏损23.6亿元 世界今日讯
- 字节跳动的2023年,关键词是“聚焦”和“务实”
- information什么意思(information是什么意思)
- 做了3年的开发,不会循环删除 List 中的元素,心态崩了
- 每日看点!比特币核心开发者提出新型修剪节点
- 全网吐槽的骁龙888迎来第二春,小米11更新MIUI 14,宛如换台新机
- 特斯拉为什么疯狂降价?听了马斯克的回答,崇敬之情油然而生
- 区块链技术的发展与应用:探索数字世界的新篇章 全球快播
- 怎么解散群并彻底删除消息_怎么解散群 天天速看
- 夏婉安(夏婉安现在多少岁了)
- 苦涩的反义词(苦涩的反义词)
- 2022年度中国科学十大进展发布
- aigc颠覆玩起来如何?怎么样AI模拟真人情感配音