V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
yidongnan
V2EX  ›  分享创造

gRPC Spring Boot Starter - SprintBoot 的 gRPC 模块

  •  1
     
  •   yidongnan ·
    yidongnan · 2017-02-27 15:14:12 +08:00 · 11992 次点击
    这是一个创建于 2616 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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

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

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

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

    主要是很难把参数再继续传递给 Service 里面,因为业务代码可能需要这些参数。
    jack80342
        6
    jack80342  
       2017-10-24 22:16:14 +08:00
    最近翻译了 Spring Boot 最新的官方文档,欢迎👏Fork,https://www.gitbook.com/book/jack80342/spring-boot/details
    yeboo
        7
    yeboo  
       2020-04-14 12:00:01 +08:00
    @yidongnan 支持多台服务器设置吗?可以给下 多台服务器 host:port 的参数示例吗?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2989 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 13:58 · PVG 21:58 · LAX 06:58 · JFK 09:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.