gRPC Spring Boot Starter - SprintBoot 的 gRPC 模块

2017-02-27 15:14:12 +08:00
 yidongnan

Grpc Spring Boot Starter

项目地址: https://github.com/yidongnan/grpc-spring-boot-starter

特点

使用 Spring Boot 的应用进行自动配置,内嵌 gRPC server

支持 Spring Cloud (可以通过 Spring Cloud 进行服务注册并且获取 gRPC server 的信息)

支持 Spring Sleuth 进行应用跟踪

支持对于 server 、 client 分别设置全局拦截器或单个的拦截器

支持 keepalive

使用方式

gRPC 服务端

添加依赖如果使用的是 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=

gRPC 客户端

添加依赖如果使用的是 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

11995 次点击
所在节点    分享创造
7 条回复
twogoods
2017-02-27 23:49:21 +08:00
自己写了个 rpc 也整合了 springboot ,也看看你的思路
yidongnan
2017-02-28 09:28:33 +08:00
@twogoods 有更好的实现思路或者方案可以私聊。欢迎 PR
richard1122
2017-02-28 09:32:47 +08:00
最近写 grpc 时候遇到一个需求,基本上每个请求都会带上 userid 这样一个参数,是不是这样就只能写到 pb 定义里面,每个 request 类型都加个字段这一种方案?

有没有办法比如在 Metadata 里面发过来,这边 service 在哪里取到?

现在想到用拦截器取出来,但是不知道怎么方便的传给 service
yidongnan
2017-02-28 09:43:53 +08:00
richard1122
2017-02-28 14:20:15 +08:00
多谢,拦截器我也尝试过。

主要是很难把参数再继续传递给 Service 里面,因为业务代码可能需要这些参数。
jack80342
2017-10-24 22:16:14 +08:00
最近翻译了 Spring Boot 最新的官方文档,欢迎👏Fork,https://www.gitbook.com/book/jack80342/spring-boot/details
yeboo
2020-04-14 12:00:01 +08:00
@yidongnan 支持多台服务器设置吗?可以给下 多台服务器 host:port 的参数示例吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/343538

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX