1。gRPCSpringBoot选型 gRPC官方并未提供gRPCSpringBoot的相关代码库, 在github中搜索grpcspringboot,最受欢迎的代码库如下图: 选择第一个开源仓库https:github。comyidongnangrpcspringbootstarter, 该代码库由国人大神创建,并附有中文文档。 接下来介如何集成该grpcspringbootstarter, 本文讲解的示例源码可参见:https:gitee。comluoexgrpcdemogrpcspringboot模块2。基础依赖 本示例依赖之前文章《gRPCJava入门示例》中的proto定义及基础代码,即源码中的grpcbase模块。3。maven依赖!gRPCspringboot依赖(包含grpcserverspringbootstarter、grpcclientspringbootstarter)dependencygroupIdnet。devhgroupIdgrpcspringbootstarterartifactIdversion2。13。1。RELEASEversiondependency4。gRPCServer端编码 服务端配置application。yaml:spring:application:name:grpcsbservergrpc:grpcserver相关配置server:启动端口port:9898 服务端服务自动注册: 实现对应的gRPC服务后通过GrpcService注解进行注册即可。 注:GrpcService组合Service注解 启动springboot应用后即可自动暴露gRPC端口及服务。5。gRPCClient端编码 客户端配置application。yaml:server:port:8080spring:application:name:grpcsbclientgrpc配置grpc:grpcclienT相关配置client:服务名(不同服务名可对应不同配置)grpcsbserver:服务端地址address:static:127。0。0。1:9898是否开启保持连接(长连接)enableKeepAlive:true保持连接时长(默认20s)keepAliveTimeout:20s没有RPC调用时是否保持连接(默认false,可禁用避免额外消耗CPU)keepAliveWithoutCalls:false客户端负载均衡策略(roundrobin(默认),pickfirst)defaultLoadBalancingPolicy:roundrobin通信类型plaintextplaintextupgradetls明文通信且http2明文通信且升级http1。1为http2使用TLS(ALPNNPN)通信negotiationType:plaintextChannels的属性都是以grpc。client。{name}。或grpc。client。{name}。security。为前缀, 如上例配置中的grpcsbserver即对应{name}, Channel的名称{name}从GrpcClient注解属性value中获取。 如果您想要配置一些其他的选项,如为所有服务端设置可信证书,并可以使用GLOBAL作为全局默认名称。 单个channel的属性配置会覆盖全局配置。 客户端stub自动注入: 通过GrpcClient即可自动注入对应的Stub, GrpcClient。value即对应配置文件中的Channel名称{name}, 即对应application。yaml中的grpc。client。grpcsbserver下的配置。 启动springboot应用后即可自动创建gRPC服务的stub客户端。6。grpcspringbootstarter源码分析 结合开源仓库https:github。comyidongnangrpcspringbootstarter源码, 看看gRPCServer端和Client端是如何在springboot中集成启动的。 6。1grpcserverspringbootstarter启动过程 查看maven依赖可以发现grpcspringbootstarter依次引入: grpcserverspringbootstartergrpcserverspringbootautoconfigure 查看grpcserverspringbootautoconfigure的spring。factories文件内容如下: 如上图中的net。devh。boot。grpc。server。autoconfigure。GrpcServerAutoConfiguration net。devh。boot。grpc。server。autoconfigure。GrpcServerFactoryAutoConfiguration 即为gRPCServer端的服务注册及启动的主要配置类, gRPCServer端配置属性类参见:GrpcServerProperties 首先扫描所有GrpcService注解修饰的服务实现类定义,生成GrpcServiceDiscoverer。 然后生成ShadedNettyGrpcServerFactory,factory包含所有GrpcService服务定义及配置属性 最后注册GrpcServerLifecycle,即通过springlifecycle自动启动gRPCServer端。 6。2grpcclientspringbootstarter启动过程 查看maven依赖可以发现grpcspringbootstarter依次引入: grpcclientspringbootstartergrpcclientspringbootautoconfigure 查看grpcclientspringbootautoconfigure的spring。factories文件内容如下: 如上图中的 net。devh。boot。grpc。client。autoconfigure。GrpcClientAutoConfiguration 即为gRPCClient端启动的主要配置类, gRPCClient端配置属性类参见:GrpcChannelsProperties 首先扫描所有GrpcClient修饰的field和set方法,生成对应的gRPCStub注入。 通过反射获取GrpcClient修饰的field,然后:根据GrpcClient。value对应的grpc。client。{name}对应服务端配置创建channel根据field类型生成对应的gRPCstub对象 创建GrpcChannelFactory。 参考: https:github。comyidongnangrpcspringbootstarter 作者:罗小爬EX 来源:https:blog。csdn。netluo15242208310articledetails122805375 点击关注,带你了解更多