ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Dapr 运用之 Java gRPC 调用篇

2021-05-10 10:55:28  阅读:315  来源: 互联网

标签:Java proto gRPC -- Dapr examples java


JAVA GRPC 服务与调用

安装协议编译器

  1. 下载对应的版本编译器,并把路径加入到环境变量中,执行以下命令生成代码

    protoc -I=$SRC_DIR --java_out=$DST_DIR $SRC_DIR/addressbook.proto
    

    -I 表示源码所在文件夹位置,--java_out 表示输出路径,空格后表示具体的 proto 文件位置,以下为示例命令

     protoc -I=C:\Users\JR\DaprDemos\java\examples\src\main\protos\examples --java_out=C:\Users\JR\DaprDemos\java\examples\src\main\java  C:\Users\JR\DaprDemos\java\examples\src\main\protos\examples\helloworld.proto
    
  2. 启动 Dapr gRPC 服务端

    dapr run --app-id hellogrpc --app-port 5000 --protocol grpc -- mvn exec:java -pl=examples -Dexec.mainClass=server.HelloWorldService -Dexec.args="-p 5000"
    

    服务端主要实现说明

    • 通过 Java SDK(实际此 SDK 可通过 protoc 自己生成,完成没有必要引用官方给的 SDK) 实现 dapr 对 gRPC 的通讯封装
    • 服务端 proto 文件为 daprclient.proto ,鉴于语言之间的不同,名字看上去有点奇怪。(比如:以 client 为后缀,实际是服务端)
    • 如果使用 Java SDK 则需要 Override onInvoke() 函数,该函数为 Dapr gRPC 调用封装。该函数提供两个签名 InvokeEnvelopeStreamObserver<Any>
      • InvokeEnvelope 用于解析 gRPC 请求函数
      • StreamObserver<Any> 用于疯转 gRPC 应答
    • helloworld.proto
      • 定义了一个 gRPC 函数 Say
      • 定义了函数签名 SayRequest
      • 定义了函数返回类型 SayResponse
      • 根据步骤1提供的 cmd 命令生成代码以在 onInvoke 函数中调用
  3. 启动 Dapr gRPC 客户端

    dapr run --protocol grpc --grpc-port 50001 -- mvn exec:java -pl=examples -Dexec.mainClass=client.HelloWorldClient -Dexec.args="-p 50001 'message one' 'message two'"
    

    客户端主要实现说明

    • 客户端 proto 文件为 dapr.proto
    • 使用生成代码调用 InvokeServiceEnvelope() 函数
      • setId 设置该函数需要调用的服务 Id ,该 Id 指在使用 Dapr 启动实例时 --app-id 指定的名称(例如步骤2中的 hellogrpc)
      • setData 设置调用函数的签名
      • setMethod 设置调用函数名称
  4. gRPC 服务端收到消息

    输出为:

     Server: message one
     Server: message two
    

至此, Java 客户端服务端通过 Dapr 完成 gRPC 通讯。

源码地址

标签:Java,proto,gRPC,--,Dapr,examples,java
来源: https://blog.51cto.com/u_12857552/2764975

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有