优雅的集成gRPC到Spring Boot项目。分grpc-server-spring-boot-starter、grpc-client-spring-boot-starter。
支持四种模式:
- inProcess 进程内模式,只使用在测试和功能演示场景
- simple 明文模式,可使用在内网微服务
- tls TLS模式,服务端、客户端使用证书保证通信安全,可对公网提供服务
- custom 自定义模式,在以上模式不满足要求的情况下,可以对服务端、客户端进行自定义
$ sh grpc-spring-boot-samples/tools/create_openssl_key.sh
证书默认生成在/tmp/sslcert,可修改脚本自定义
<dependency>
<groupId>io.nity.grpc</groupId>
<artifactId>grpc-server-spring-boot-starter</artifactId>
<version>1.0.0</version>
</dependency>
compile 'io.nity.grpc:grpc-server-spring-boot-starter:1.0.0'
grpc.server.enableReflection=true
grpc.server.model=simple
grpc.server.host=localhost
grpc.server.port=50440
@GrpcService
public class GreeterGrpcService extends GreeterGrpc.GreeterImplBase {
@Override
public void sayHello(HelloRequest request, StreamObserver<HelloReply> responseObserver) {
//grpc service implement code
}
}
1.可创建GrpcServerBuilderConfigurer bean,在configure里对创建好的serverBuilder进一步配置
@Configuration
public class GrpcCustomConfig {
@Bean
public GrpcServerBuilderConfigurer serverBuilderConfigurer() {
return serverBuilder -> {
//sample code
//serverBuilder.maxInboundMessageSize()
};
}
}
2.使用custom模式,创建ServerBuilder bean,根据需要对serverBuilder进行配置
@Configuration
public class GrpcCustomConfig {
@Bean
@ConditionalOnProperty(value = "grpc.server.model", havingValue = GrpcServerProperties.SERVER_MODEL_CUSTOM)
public ServerBuilder getServerBuilder() {
ServerBuilder<?> serverBuilder;
//create and config serverBuilder
return serverBuilder;
}
}
<dependency>
<groupId>io.nity.grpc</groupId>
<artifactId>grpc-client-spring-boot-starter</artifactId>
<version>1.0.0</version>
</dependency>
compile 'io.nity.grpc:grpc-client-spring-boot-starter:1.0.0'
grpc.client.default.model=simple
grpc.client.default.host=localhost
grpc.client.default.port=50440
@RestController
public class GreeterController {
@GrpcClient("default")
private GreeterGrpc.GreeterBlockingStub greeterBlockingStub;
@RequestMapping(value = {"/greet"})
public String greet() {
//code...
response = greeterBlockingStub.sayHello(request);
//code...
}
}
1.可创建GrpcChannelBuilderConfigurer bean,在configure里对创建好的channelBuilder进一步配置
@Configuration
public class GrpcClientConfig {
@Bean
public GrpcChannelBuilderConfigurer channelBuilderConfigurer() {
return (channelBuilder, name) -> {
log.info("configure channelBuilder...");
//channelBuilder.loadBalancerFactory(something);
//etc.
};
}
}
2.可创建GrpcChannelConfigurer bean,在configure里对创建好的channel进一步配置
@Configuration
public class GrpcClientConfig {
@Bean
public GrpcChannelConfigurer channelConfigurer() {
return (channel, name) -> {
log.info("configure channel...");
//ClientInterceptors.intercept(channel, interceptors);
//etc.
};
}
}
3.可使用custom模式,创建CustomChannelFactory bean,实现ChannelBuilder的创建逻辑
@Configuration
public class GrpcClientConfig {
@Bean
public CustomChannelFactory customChannelFactory(final GrpcClientPropertiesMap clientPropertiesMap,
final GrpcChannelBuilderConfigurer channelBuilderConfigurer,
final GrpcChannelConfigurer channelConfigurer) {
return new CustomChannelFactory(clientPropertiesMap, channelBuilderConfigurer, channelConfigurer) {
@Override
protected ManagedChannelBuilder newChannelBuilder(final String name, final GrpcClientProperties clientProperties) {
ManagedChannelBuilder<?> managedChannelBuilder;
//create and config ChannelBuilder
return managedChannelBuilder;
}
};
}
}
<dependency>
<groupId>io.nity.grpc</groupId>
<artifactId>grpc-spring-boot-starter</artifactId>
<version>1.0.0</version>
</dependency>
compile 'io.nity.grpc:grpc-spring-boot-starter:1.0.0'
https://oss.sonatype.org/content/repositories/snapshots/
具体的代码请参照各示例模块。
Apache License, Version 2.0 Copyright (C) Apache Software Foundation