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

gRPC Spring Boot Starter - SprintBoot 的 gRPC 模块

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

    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     Solana     1064 人在线   最高记录 6679       Select Language/a>
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms
    UTC 23:18 PVG 07:18 LAX 16:18 JFK 19:18
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86