【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來進行服務定義的展示和調用了。

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

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