• Dapr 运用之 Java gRPC 调用篇


    JAVA GRPC 服务与调用

    安装协议编译器

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

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

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

       protoc -I=C:UsersJRDaprDemosjavaexamplessrcmainprotosexamples --java_out=C:UsersJRDaprDemosjavaexamplessrcmainjava  C:UsersJRDaprDemosjavaexamplessrcmainprotosexampleshelloworld.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 通讯。

    源码地址

  • 相关阅读:
    【转帖】关于release和debug的区别
    【转载】技术普及帖:你刚才在淘宝上买了一件东西
    iPhone史上最全的扫盲帖 【越狱,解锁,激活,Cydia,基带,裸机】
    【转帖】深入浅出话事件
    asp.net 4.0 的IIS部署
    【转帖】vs2010 快捷键大全
    C++中在一个类定义的头文件里含有一个对象,这个对象没有默认构造函数,如何实现初始化
    开通博客
    Selenium2+python自动化65js定位几种方法总结
    jps查看不到数据节点
  • 原文地址:https://www.cnblogs.com/Zhang-Xiang/p/12058097.html
Copyright © 2020-2023  润新知