Skip to content
Go back

通过使用evans来更加便捷地调试grpc服务

Edit page

通过使用evans来更加便捷地调试grpc服务

有的时候需要调试grpc服务, 但是通过代码来进行调试比较麻烦, 因为需要编写相关代码, 这个时候需要一个工具来帮助我们进行调试, 这里介绍一个工具evans.

安装

进入Releases页面下载对应的版本, 然后进行解压.
解压后的文件夹中有一个evans的可执行文件, 如果想在任意位置都通过evans来调用, 那么需要做以下操作列表中的任意一种

启动

通过evans命令启动, 由于服务调用需要知道契约, 所以需要指定契约文件, 有两种方式

evans --host <HOST> --port <PORT> --path <PROTOBUF_ROOT> --proto <PROTOBUF_FILE>

其中:
<PROTOBUF_ROOT>是protobuf文件的根目录
<PROTOBUF_FILE>是protobuf文件相对于<PROTOBUF_ROOT>的路径

例如以下给定参数:
--path /Users/kuoxiangcheng/protobuf --proto test/test.proto
在这个例子中test/test.proto是处于/Users/kuoxiangcheng/protobuf目录下的文件.
当多个protobuf之间存在依赖关系时, 配置--path是一个很好的方式, 因为可以通过--path来指定protobuf文件的根目录

evans --host <HOST> --port <PORT> -r

当执行上面的命令后, 会进入evans的交互式界面, 内容如下


  ______
 |  ____|
 | |__    __   __   __ _   _ __    ___
 |  __|   \ \ / /  / _. | | '_ \  / __|
 | |____   \ V /  | (_| | | | | | \__ \
 |______|   \_/    \__,_| |_| |_| |___/

 more expressive universal gRPC client


192.168.16.243:27778>

服务调用

当进入evans的交互式界面后, 后续连接特定的服务, 调用特定的方法, 以及传递参数都是通过交互式界面来完成的.
接下来需要几个步骤来完成服务的调用

列出package

通过show package命令来查看当前连接的服务中的package

show package

当执行上述命令后, 会列出当前连接的服务中的所有package, 参考输出如下

+---------------+
|    PACKAGE    |
+---------------+
| nott.v1.nottd |
| nott.v1.nottm |
+---------------+

设置package

根据命令执行的结果选择一个特定的package进行设置.
例如: 设置packagenott.v1.nottm

service nott.v1.nottm

列出service

当设置完package后, 还需要设置service, 通过show service命令来查看当前package下的所有service

show service

当执行上述命令后, 会列出当前连接的服务中的所有service, 参考输出如下

+---------+---------------------+-----------------------+------------------------+
| SERVICE |         RPC         |     REQUEST TYPE      |     RESPONSE TYPE      |
+---------+---------------------+-----------------------+------------------------+
| Nottm   | Register            | RegisterRequest       | RegisterResponse       |
| Nottm   | ListRegisters       | ListRegistersRequest  | ListRegistersResponse  |
| Nottm   | UpdateRegister      | UpdateRegisterRequest | UpdateRegisterResponse |
| Nottm   | RevokeRegister      | RevokeRegisterRequest | RevokeRegisterResponse |
| Nottm   | Push                | PushRequest           | PushResponse           |
| Nottm   | Poll                | PollRequest           | PollResponse           |
| Nottm   | RetrieveSentMessage | PollRequest           | PollResponse           |
| Nottm   | QueryMessages       | QueryMessagesRequest  | QueryMessagesResponse  |
| Nottm   | CheckState          | CheckStateRequest     | CheckStateResponse     |
| Nottm   | QueueStatus         | QueueStatusRequest    | QueueStatusResponse    |
| Nottm   | InspectNottd        | InspectNottdRequest   | InspectNottdResponse   |
| Nottm   | InspectNottm        | InspectNottmRequest   | InspectNottmResponse   |
| Nottm   | RestartNottd        | RestartNottdRequest   | RestartNottdResponse   |
+---------+---------------------+-----------------------+------------------------+

设置service

根据命令执行的结果选择一个特定的service进行设置.
例如: 设置serviceNottm

service Nottm

调用rpc

当设置完service后, 可以通过call <RPC>命令来调用rpc方法.

例如: 调用Register方法

call Register

然后根据提示输入参数, 当输入完毕后, 会返回调用结果.

参考


Edit page
Share this post on:

Previous Post
grpc服务tls连接握手失败问题排查
Next Post
transport endpoint is not connected问题解决