zoukankan      html  css  js  c++  java
  • 【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来进行服务定义的展示和调用了。

    如果还有兴趣的同学,可以去看下源码。

  • 相关阅读:
    ASP.NET学习5 后台控制前台执行js的方法
    uml笔记
    Python拓展——import导入包之random随机数和turtle海龟作图(2)
    Python拓展——import导入包之random随机数和turtle海龟作图(1)
    蓝桥杯考完了
    Python第一单元测试(答案)
    Python第一单元测试
    Python第五课——嵌套for循环和if语句初步(2)
    Python第五课——嵌套for循环和if语句初步(1)
    Python第四课——import导入包和for循环(2)
  • 原文地址:https://www.cnblogs.com/zhangjk1993/p/12349036.html
Copyright © 2011-2022 走看看