集成Spring-Boot与gRPC,grpc-spring-boot-starter
grpc是一个出身名门的RPC框架,性能高,灵活度高,支持多语言。
支持多语言,如果你的项目在使用多种语言做开发,非常推荐使用。
作为Java的扛把子,Spring没有提供官方的spring-boot-starter-grpc,所以出现了很多了grpc-spring-boot-starter。
我也提供了一个快速上手,高度可定制化的grpc-spring-boot-starter供大家参考使用。
grpc-spring-boot-starter
该项目是java-grpc结合springboot、springcloud使用的一个开源项目,可以结合springboot项目单独使用,也可以结合springcloud项目在微服务架构下使用。该项目具有如下特点或特性:
- 基于springboot自动配置,实现起步依赖,只需要简单的配置和相应的注解,就可以启动gRPC Server。
- 支持在Spring Cloud项目中使用,支持主流的Spring Cloud eureka、springcloud consul的服务注册发现组件。
- 支持分布式链路跟踪,结合springcloud sleuth,可以展示服务调用链。
- 支持对gRPC Server的健康检查。
主要功能包括,服务提供方,服务消费者
作为消费者
基本功能
- 支持Autowire Stub(BlockingStub, FutureStub, Stub)三种。
@Component
public UserIdentifier {
@Autowired
private UserServiceGrpc.UserStub stub;
}
- 自动连接Channel
在application.properties
或application.yaml
中配置grpc.consumers.service.[SERVICE_NAME]=grpc://localhost:8080
即可。
grpc.consumers.service.user.UserService=grpc://localhost:8080
高级功能
在application.properties
或application.yaml
中配置grpc.consumers.service.[SERVICE_NAME]=xxxx
即可。
其中xxxx为Spring Bean
的name,必须实现wenmingwei.consumers.Customizer
接口
package wenmingwei.consumers;
import io.grpc.Channel;
public interface Customizer {
Channel customize();
}
可以用于自定义Channel,可以添加诸如服务发现
, 服务降级
, 负载均衡
, 链路跟踪
等等功能。
后续会提供示例程序供大家参考。
作为提供方
基本功能
- 自动绑定服务并暴露。
grpc服务的实现,加上注解@Component
即可
@Component
public class UserServiceImpl extends UserServiceGrpc.UserServiceImplBase {
//省略...
}
2.【可选】 默认服务器设置。
grpc.providers.host=192.168.0.1
grpc.providers.port=9999
grpc.providers.name=default-grpc-server
不设置的话,则默认监听8080端口
高级功能
- 服务分组
可以同时定义多个grpc服务监听,用于内部分组。
每个服务监听用于监听不同的grpc服务。配置如下:
# user服务的监听
grpc.providers.host.0=192.168.0.1
grpc.providers.port.0=8080
grpc.providers.name.0=user-grpc-server
grpc.providers.services.0=user.UserService
# admin服务的监听
grpc.providers.host.1=192.168.0.1
grpc.providers.port.1=8081
grpc.providers.name.1=admin-grpc-server
grpc.providers.services.1=admin.AdminService
- 服务监听定制
如果定义了grpc.providers.Y.customizer=xxxx
,启动Y为服务监听序号,不设置则默认0。
其中xxxx为Spring Bean
的name,必须实现wenmingwei.providers.Customizer
接口
package wenmingwei.providers;
import io.grpc.ServerBuilder;
public interface Customizer<T extends ServerBuilder<T>> {
void customize(ServerBuilder<T> serverBuilder);
}
可以用于自定义io.grpc.Server
,可以添加诸如服务注册
, 服务挡板
, 链路跟踪
等等功能。
后续会提供示例程序供大家参考。
欢迎大家提意见,后续进行改进。
作者:onmeiei
链接:https://www.jianshu.com/p/469e3603d689
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。