| <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Apache Dubbo – 服务调试</title><link>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/tutorial/debugging/</link><description>Recent content in 服务调试 on Apache Dubbo</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><atom:link href="https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/tutorial/debugging/index.xml" rel="self" type="application/rss+xml"/><item><title>Overview: 使用 grpc_cli 调试 Dubbo-go 服务</title><link>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/tutorial/debugging/grpc_cli/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/tutorial/debugging/grpc_cli/</guid><description> |
| <p>grpc_cli 工具是 gRPC 生态用于调试服务的工具,在 server 开启<a href="https://github.com/grpc/grpc/blob/master/doc/server-reflection.md">反射服务</a>的前提下,可以获取到服务的 proto 文件、服务名、方法名、参数列表,以及发起 gRPC 调用。</p> |
| <p>Triple 协议兼容 gRPC 生态,并默认开启 gRPC 反射服务,因此可以直接使用 grpc_cli 调试 triple 服务。</p> |
| <h2 id="1-准备工作">1. 准备工作</h2> |
| <ul> |
| <li>dubbo-go cli 工具和依赖工具已安装</li> |
| <li>创建一个新的 demo 应用</li> |
| <li>安装grpc_cli,参考 <a href="https://github.com/grpc/grpc/blob/master/doc/command_line_tool.md">grpc_cli 文档</a></li> |
| </ul> |
| <h2 id="2-使用-grpc_cli-工具进行-triple-服务调试">2. 使用 grpc_cli 工具进行 Triple 服务调试</h2> |
| <h3 id="21-启动-demo-应用-server">2.1 启动 demo 应用 server</h3> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>$ mkdir grpc_cli_test |
| </span></span><span style="display:flex;"><span>$ <span style="color:#b58900">cd</span> grpc_cli_test |
| </span></span><span style="display:flex;"><span>$ dubbogo-cli newDemo . |
| </span></span><span style="display:flex;"><span>$ go mod tidy |
| </span></span><span style="display:flex;"><span>$ <span style="color:#b58900">cd</span> go-server/cmd |
| </span></span><span style="display:flex;"><span>$ go run . |
| </span></span></code></pre></div><h3 id="22-使用-grpc_cli-进行服务调试">2.2 使用 grpc_cli 进行服务调试</h3> |
| <ol> |
| <li>查看 triple 服务的接口定义</li> |
| </ol> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>$ grpc_cli ls localhost:20000 -l |
| </span></span><span style="display:flex;"><span>filename: samples_api.proto |
| </span></span><span style="display:flex;"><span>package: api; |
| </span></span><span style="display:flex;"><span>service Greeter <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> rpc SayHello<span style="color:#719e07">(</span>api.HelloRequest<span style="color:#719e07">)</span> returns <span style="color:#719e07">(</span>api.User<span style="color:#719e07">)</span> <span style="color:#719e07">{}</span> |
| </span></span><span style="display:flex;"><span> rpc SayHelloStream<span style="color:#719e07">(</span>stream api.HelloRequest<span style="color:#719e07">)</span> returns <span style="color:#719e07">(</span>stream api.User<span style="color:#719e07">)</span> <span style="color:#719e07">{}</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">}</span> |
| </span></span></code></pre></div><ol start="2"> |
| <li> |
| <p>查看请求参数类型</p> |
| <p>例如开发者期望测试上述端口的 SayHello 方法,尝试获取 HelloRequest 的具体定义,需要执行如下指令,可查看到对应参数的定义。</p> |
| </li> |
| </ol> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>$ grpc_cli <span style="color:#b58900">type</span> localhost:20000 api.HelloRequest |
| </span></span><span style="display:flex;"><span>message HelloRequest <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> string <span style="color:#268bd2">name</span> <span style="color:#719e07">=</span> <span style="color:#2aa198">1</span> <span style="color:#719e07">[</span><span style="color:#268bd2">json_name</span> <span style="color:#719e07">=</span> <span style="color:#2aa198">&#34;name&#34;</span><span style="color:#719e07">]</span>; |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">}</span> |
| </span></span></code></pre></div><ol start="3"> |
| <li> |
| <p>请求接口</p> |
| <p>已经知道了请求参数的具体类型,可以发起调用来测试对应服务。查看返回值是否符合预期。</p> |
| </li> |
| </ol> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>$ grpc_cli call localhost:20000 SayHello <span style="color:#2aa198">&#34;name: &#39;laurence&#39;&#34;</span> |
| </span></span><span style="display:flex;"><span>connecting to localhost:20000 |
| </span></span><span style="display:flex;"><span>name: <span style="color:#2aa198">&#34;Hello laurence&#34;</span> |
| </span></span><span style="display:flex;"><span>id: <span style="color:#2aa198">&#34;12345&#34;</span> |
| </span></span><span style="display:flex;"><span>age: <span style="color:#2aa198">21</span> |
| </span></span><span style="display:flex;"><span>Received trailing metadata from server: |
| </span></span><span style="display:flex;"><span>accept-encoding : identity,gzip |
| </span></span><span style="display:flex;"><span>grpc-accept-encoding : identity,deflate,gzip |
| </span></span><span style="display:flex;"><span>Rpc succeeded with OK status |
| </span></span></code></pre></div><p> 可看到获得了正确的返回值。在 server 侧可以观察到被正确请求的日志:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>Dubbo3 GreeterProvider get user <span style="color:#268bd2">name</span> <span style="color:#719e07">=</span> laurence |
| </span></span></code></pre></div></description></item></channel></rss> |