项目地址: https://github.com/yidongnan/grpc-spring-boot-starter
使用 Spring Boot 的应用进行自动配置,内嵌 gRPC server
支持 Spring Cloud (可以通过 Spring Cloud 进行服务注册并且获取 gRPC server 的信息)
支持 Spring Sleuth 进行应用跟踪
支持对于 server 、 client 分别设置全局拦截器或单个的拦截器
支持 keepalive
添加依赖如果使用的是 Maven
<dependency> <groupId>net.devh</groupId> <artifactId>grpc-server-spring-boot-starter</artifactId> <version>1.0.0.RELEASE</version> </dependency>
添加依赖如果使用的是 Gradle
dependencies { compile 'net.devh:grpc-server-spring-boot-starter:1.0.0.RELEASE' }
实现 Grpc 生成的接口,并使用 @GrpcService
注解
@GrpcService(GreeterGrpc.class) public class GrpcServerService extends GreeterGrpc.GreeterImplBase { @Override public void sayHello(HelloRequest req, StreamObserver<HelloReply> responseObserver) { HelloReply reply = HelloReply.newBuilder().setMessage("Hello =============> " + req.getName()).build(); responseObserver.onNext(reply); responseObserver.onCompleted(); } }
设置 gRPC 的 host 跟 port 在 application.properties ,默认的监听的 host 是 0.0.0.0 ,默认的 port 是 9090
grpc.server.port= grpc.server.host=
添加依赖如果使用的是 Maven
<dependency> <groupId>net.devh</groupId> <artifactId>grpc-client-spring-boot-starter</artifactId> <version>1.0.0.RELEASE</version> </dependency>
添加依赖如果使用的是 Gradle
dependencies { compile 'net.devh:grpc-client-spring-boot-starter:1.0.0.RELEASE' }
使用 @GrpcClient
注解去设置 Channel 或者 也可以通过 GrpcChannelFactory
中的 createChannel
得到 Channel
@GrpcClient("gRPC server name") private Channel serverChannel;
gRPC request
GreeterGrpc.GreeterBlockingStub stub = GreeterGrpc.newBlockingStub(serverChannel); HelloReply respOnse= stub.sayHello(HelloRequest.newBuilder().setName(name).build());
设置 gRPC 服务器的 host 跟 port 在 application.properties ,默认的 host 是[127.0.0.1],默认的 port 是[9090]
grpc.client.(gRPC server name).host[0]= grpc.client.(gRPC server name).port[0]=
https://github.com/yidongnan/grpc-spring-boot-starter/tree/master/examples
![]() | 1 twogoods 2017-02-27 23:49:21 +08:00 via Android 自己写了个 rpc 也整合了 springboot ,也看看你的思路 |
![]() | 3 richard1122 2017-02-28 09:32:47 +08:00 via Android 最近写 grpc 时候遇到一个需求,基本上每个请求都会带上 userid 这样一个参数,是不是这样就只能写到 pb 定义里面,每个 request 类型都加个字段这一种方案? 有没有办法比如在 Metadata 里面发过来,这边 service 在哪里取到? 现在想到用拦截器取出来,但是不知道怎么方便的传给 service |
![]() | 5 richard1122 2017-02-28 14:20:15 +08:00 via Android 多谢,拦截器我也尝试过。 主要是很难把参数再继续传递给 Service 里面,因为业务代码可能需要这些参数。 |
![]() | 6 jack80342 2017-10-24 22:16:14 +08:00 最近翻译了 Spring Boot 最新的官方文档,欢迎Fork,https://www.gitbook.com/book/jack80342/spring-boot/details |