赞
踩
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模块。
<!-- 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>
服务端配置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中集成启动的。
查看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端。
查看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,然后:
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。