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模块
本示例依赖之前文章《gRPC Java入门示例》中的proto定义及基础代码,即源码中的grpc-base模块。
net.devh
grpc-spring-boot-starter
2.13.1.RELEASE
服务端配置application.yaml:
spring:
application:
name: grpc-sb-server
grpc:
# grpc server相关配置
server:
# 启动端口
port: 9898
服务端服务自动注册:
实现对应的gRPC服务后通过@GrpcService注解进行注册即可。
注:@GrpcService组合@Service注解
启动springboot应用后即可自动暴露gRPC端口及服务。
客户端配置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客户端。
结合开源仓库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
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号