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:\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 通訊。

源碼地址

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章