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

源碼地址


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM