【gRPC】如何便捷的調試gRPC程序


前言

gRPC是一款廣泛應用的rpc框架,因為基於C/S架構,服務啟動之后,需要編寫對應的客戶端才能調用,調試起來相對麻煩一些,這里主要介紹一下如何通過swagger-ui來調試grpc服務。

grpc-swagger

gRPC-swagger 是基於 gRPC 反射開發的一款 gRPC 調試工具,可以使用 swagger-ui 方便地展示和調用 gRPC 方法。因為 gRPC-swagger 是基於反射開發,所以使用時無需修改 proto 及相關的代碼實現,只需在啟動服務時開啟反射功能(不只java,其他語言也可以)。下圖是使用效果

項目地址

grpc-swagger

使用方法

啟動grpc-swagger服務

grpc-swagger是基於spring boot開發,可以下載jar包直接運行:

wget https://github.com/grpc-swagger/grpc-swagger/releases/latest/download/grpc-swagger.jar
java -jar grpc-swagger.jar

啟動服務時開啟反射

該工具是基於gRPC反射做的,所以需要在啟動服務時開啟反射,下面是java開啟反射的方式:
添加依賴

<dependency>
    <groupId>io.grpc</groupId>
    <artifactId>grpc-services</artifactId>
    <version>${grpc.version}</version>
</dependency>

開啟反射

Server server = ServerBuilder.forPort(SERVER_PORT)
    .addService(new HelloServiceImpl())
    // 這里開啟反射
    .addService(ProtoReflectionService.newInstance())
    .build()
    .start();

其他語言開啟方式參考GRPC Server Reflection Protocol

注冊服務

因為我們一開始並不知道對應的gRPC服務提供哪些服務方法,所以這里有個注冊服務的過程,其所做的事就是輸入目標服務的地址,然后通過反射來獲取當前gRPC服務提供的服務方法。當前提供一個簡單的頁面,地址是 http://localhost:8080/ui/r.html,在Endpoint Register里填入grpc 服務的地址,成功注冊之后會在 Services 里列出可用的服務

使用 swagger-ui 調用gRPC服務

下面就比較簡單了,通過鏈接跳過來就是一個swagger-ui的頁面,點擊 Try it out 就可以開始調試了。

實現原理

這里說下大概的實現原理:

  1. gRPC 提供了反射的功能,通過反射,我們可以實現獲取服務的定義、動態的調用gRPC方法、JSON和PB相互轉換等功能,這里的實現主要是利用了這個功能。
  2. Swagger-ui 也提供了文檔的格式規范,我們將獲取到的gRPC服務定義轉換成swagger-ui需要的格式,就可以使用swagger-ui來進行服務定義的展示和調用了。

如果還有興趣的同學,可以去看下源碼。


免責聲明!

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



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