| <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/quickstart/</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/quickstart/index.xml" rel="self" type="application/rss+xml"/><item><title>Overview: 安装 Dubbo-go 开发环境</title><link>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/quickstart/install/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/quickstart/install/</guid><description> |
| <h3 id="1-推荐-go-版本">1. 推荐 Go 版本</h3> |
| <p><a href="https://golang.google.cn/">Go</a> &gt;= <code>1.15</code></p> |
| <blockquote> |
| <p>建议使用最新 <code>1.19</code></p> |
| </blockquote> |
| <p>安装成功后将 <code>$GOPATH/bin</code> 加入环境变量</p> |
| <h3 id="2-安装序列化工具">2. 安装序列化工具</h3> |
| <p><a href="https://github.com/protocolbuffers/protobuf/releases">protoc</a></p> |
| <h3 id="3-安装工具以及相关插件">3. 安装工具以及相关插件</h3> |
| <p>执行以下指令安装 dubbogo-cli 至 <code>$GOPATH/bin</code></p> |
| <p>添加 Go 模块代理</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-bash" data-lang="bash"><span style="display:flex;"><span>$ <span style="color:#b58900">export</span> <span style="color:#268bd2">GOPROXY</span><span style="color:#719e07">=</span><span style="color:#2aa198">&#34;https://goproxy.cn&#34;</span> |
| </span></span></code></pre></div><p>安装 dubbogo-cli 工具</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-bash" data-lang="bash"><span style="display:flex;"><span>$ go install github.com/dubbogo/dubbogo-cli@latest |
| </span></span></code></pre></div><p>执行 dubbogo-cli 命令</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-bash" data-lang="bash"><span style="display:flex;"><span>$ dubbogo-cli |
| </span></span><span style="display:flex;"><span>hello |
| </span></span></code></pre></div><p>安装依赖的工具插件</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-bash" data-lang="bash"><span style="display:flex;"><span>$ dubbogo-cli install all |
| </span></span></code></pre></div><p>确保上述安装的工具位于在系统环境变量内</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-bash" data-lang="bash"><span style="display:flex;"><span>$ protoc --version |
| </span></span><span style="display:flex;"><span>libprotoc 3.14.0 |
| </span></span></code></pre></div><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>$ protoc-gen-go --version |
| </span></span><span style="display:flex;"><span>protoc-gen-go v1.26.0 |
| </span></span></code></pre></div><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>$ protoc-gen-go-triple --version |
| </span></span><span style="display:flex;"><span>protoc-gen-go-triple 1.0.8 |
| </span></span></code></pre></div></description></item><item><title>Overview: 完成一次 RPC 调用</title><link>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/quickstart/quickstart_triple/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/quickstart/quickstart_triple/</guid><description> |
| <h2 id="1-生成-demo-项目">1. 生成 Demo 项目</h2> |
| <p>使用安装好的 dubbogo-cli 工具,创建 demo 工程。</p> |
| <p>创建并切换目录</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-bash" data-lang="bash"><span style="display:flex;"><span>$ mkdir quickstart <span style="color:#719e07">&amp;&amp;</span> <span style="color:#b58900">cd</span> quickstart |
| </span></span></code></pre></div><p>使用 dubbogo-cli 工具创建新项目</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-bash" data-lang="bash"><span style="display:flex;"><span>$ dubbogo-cli newDemo . |
| </span></span></code></pre></div><p>查看项目结构</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-bash" data-lang="bash"><span style="display:flex;"><span>$ tree . |
| </span></span><span style="display:flex;"><span>. |
| </span></span><span style="display:flex;"><span>├── api |
| </span></span><span style="display:flex;"><span>│ ├── samples_api.pb.go |
| </span></span><span style="display:flex;"><span>│ ├── samples_api.proto |
| </span></span><span style="display:flex;"><span>│ └── samples_api_triple.pb.go |
| </span></span><span style="display:flex;"><span>├── go-client |
| </span></span><span style="display:flex;"><span>│ ├── cmd |
| </span></span><span style="display:flex;"><span>│ │ └── client.go |
| </span></span><span style="display:flex;"><span>│ └── conf |
| </span></span><span style="display:flex;"><span>│ └── dubbogo.yaml |
| </span></span><span style="display:flex;"><span>├── go-server |
| </span></span><span style="display:flex;"><span>│ ├── cmd |
| </span></span><span style="display:flex;"><span>│ │ └── server.go |
| </span></span><span style="display:flex;"><span>│ └── conf |
| </span></span><span style="display:flex;"><span>│ └── dubbogo.yaml |
| </span></span><span style="display:flex;"><span>└── go.mod |
| </span></span></code></pre></div><p>可看到生成的项目中包含一个 client 项目和一个 server 项目,以及相关的配置文件。</p> |
| <h3 id="11-查看接口描述文件">1.1 查看接口描述文件</h3> |
| <p><code>helloworld.proto</code></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-protobuf" data-lang="protobuf"><span style="display:flex;"><span>syntax <span style="color:#719e07">=</span> <span style="color:#2aa198">&#34;proto3&#34;</span>; |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">package</span> api; |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">option</span> go_package <span style="color:#719e07">=</span> <span style="color:#2aa198">&#34;./;api&#34;</span>; |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">// The greeting service definition. |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span><span style="color:#268bd2">service</span> Greeter { |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// Sends a greeting |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">rpc</span> SayHello (HelloRequest) <span style="color:#719e07">returns</span> (User) {} |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// Sends a greeting via stream |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">rpc</span> SayHelloStream (stream HelloRequest) <span style="color:#719e07">returns</span> (stream User) {} |
| </span></span><span style="display:flex;"><span>} |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">// The request message containing the user&#39;s name. |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span><span style="color:#268bd2">message</span> <span style="color:#268bd2">HelloRequest</span> { |
| </span></span><span style="display:flex;"><span> <span style="color:#dc322f">string</span> name <span style="color:#719e07">=</span> <span style="color:#2aa198">1</span>; |
| </span></span><span style="display:flex;"><span>} |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">// The response message containing the greetings |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span><span style="color:#268bd2">message</span> <span style="color:#268bd2">User</span> { |
| </span></span><span style="display:flex;"><span> <span style="color:#dc322f">string</span> name <span style="color:#719e07">=</span> <span style="color:#2aa198">1</span>; |
| </span></span><span style="display:flex;"><span> <span style="color:#dc322f">string</span> id <span style="color:#719e07">=</span> <span style="color:#2aa198">2</span>; |
| </span></span><span style="display:flex;"><span> <span style="color:#dc322f">int32</span> age <span style="color:#719e07">=</span> <span style="color:#2aa198">3</span>; |
| </span></span><span style="display:flex;"><span>} |
| </span></span></code></pre></div><p>demo项目中,默认生成了一个接口描述文件,接口服务名为 api.Greeter, 包含两个 RPC 方法,入参为 HelloRequest,返回值为 User,两个方法分别为普通 RPC 方法和 Streaming 类型 RPC 方法。</p> |
| <h3 id="12-编译接口-可选">1.2 编译接口 (可选)</h3> |
| <p>使用安装好的编译工具编译 pb 接口。</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-bash" data-lang="bash"><span style="display:flex;"><span>$ <span style="color:#b58900">cd</span> api |
| </span></span><span style="display:flex;"><span>$ protoc --go_out<span style="color:#719e07">=</span>. --go-triple_out<span style="color:#719e07">=</span>. ./samples_api.proto |
| </span></span></code></pre></div><p>参数意义:<code>--go_out=.</code> 使用上述安装的 <code>protoc-gen-go</code> 插件,生成文件到当前目录,<code>--go-triple_out=.</code>使用上述安装的 <code>protoc-gen-go-triple</code> 插件,生成文件到当前目录。</p> |
| <p>执行该指令后,会生成两个文件,分别是helloworld.pb (包含 proto 结构) 和 helloworld_triple.pb.go (包含 triple 协议接口)。</p> |
| <p>在 demo 工程中,预先生成好了这两个文件,修改 .proto 文件后重新执行命令生成,即可覆盖。</p> |
| <h2 id="2-开启一次-rpc-调用">2. 开启一次 RPC 调用</h2> |
| <p>项目根目录执行</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-fallback" data-lang="fallback"><span style="display:flex;"><span>$ go mod tidy |
| </span></span></code></pre></div><p>拉取到最新的框架依赖:</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-go" data-lang="go"><span style="display:flex;"><span>module helloworld |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">go</span> <span style="color:#2aa198">1.17</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">require</span> ( |
| </span></span><span style="display:flex;"><span> dubbo.apache.org<span style="color:#719e07">/</span>dubbo<span style="color:#719e07">-</span><span style="color:#719e07">go</span><span style="color:#719e07">/</span>v3 v3<span style="color:#2aa198">.0.1</span> |
| </span></span><span style="display:flex;"><span> github.com<span style="color:#719e07">/</span>dubbogo<span style="color:#719e07">/</span>grpc<span style="color:#719e07">-</span><span style="color:#719e07">go</span> v1<span style="color:#2aa198">.42.9</span> |
| </span></span><span style="display:flex;"><span> github.com<span style="color:#719e07">/</span>dubbogo<span style="color:#719e07">/</span>triple v1<span style="color:#2aa198">.1.8</span> |
| </span></span><span style="display:flex;"><span> google.golang.org<span style="color:#719e07">/</span>protobuf v1<span style="color:#2aa198">.27.1</span> |
| </span></span><span style="display:flex;"><span>) |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">require</span> ( |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">...</span> |
| </span></span><span style="display:flex;"><span>) |
| </span></span></code></pre></div> |
| <div class="alert alert-info" role="alert"> |
| <h4 class="alert-heading">输出结果</h4> |
| <p>先后启动服务端和客户端: 开启两个终端,在 <code>go-server/cmd</code> 和 <code>go-client/cmd</code> 文件夹下分别执行 <code>go run .</code> , 可在客户端看到输出:</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>client response result: name:<span style="color:#2aa198">&#34;Hello laurence&#34;</span> id:<span style="color:#2aa198">&#34;12345&#34;</span> age:21 |
| </span></span></code></pre></div><p>获得调用结果成功。</p> |
| </div> |
| <div class="alert alert-primary" role="alert"> |
| <h4 class="alert-heading">更多</h4> |
| 细心的读者可以发现,以上例子编写的的服务端可以接受来自客户端的普通RPC、流式RPC调用请求。目前只编写了普通调用的Client,读者可以根据 samples 库中的例子来尝试编写流式客户端和服务端。 |
| </div></description></item><item><title>Overview: 完成一次自己定义接口的版本 RPC 调用</title><link>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/quickstart/quickstart_triple_with_customize/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/quickstart/quickstart_triple_with_customize/</guid><description> |
| <h2 id="1-实现概述">1. 实现概述</h2> |
| <p>我们本章来实现一个简单的小需求,实现一个分布式ID生成服务,通过该服务可以获取分布式ID |
| (假设的分布式ID,我们不探讨ID的生成方案和算法,这里直接使用uuid代替,只为演示自定义服务的创建)</p> |
| <h2 id="2-服务端实现">2. 服务端实现</h2> |
| <p>首先使用 dubbogo-cli 创建 IDC 服务</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-bash" data-lang="bash"><span style="display:flex;"><span>dubbogo-cli newApp IDC <span style="color:#719e07">&amp;&amp;</span> <span style="color:#b58900">cd</span> IDC |
| </span></span></code></pre></div><p>查看项目结构</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-bash" data-lang="bash"><span style="display:flex;"><span>tree . |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span>. |
| </span></span><span style="display:flex;"><span>├── Makefile |
| </span></span><span style="display:flex;"><span>├── api |
| </span></span><span style="display:flex;"><span>│ ├── api.pb.go |
| </span></span><span style="display:flex;"><span>│ ├── api.proto |
| </span></span><span style="display:flex;"><span>│ └── api_triple.pb.go |
| </span></span><span style="display:flex;"><span>├── build |
| </span></span><span style="display:flex;"><span>│ └── Dockerfile |
| </span></span><span style="display:flex;"><span>├── chart |
| </span></span><span style="display:flex;"><span>│ ├── app |
| </span></span><span style="display:flex;"><span>│ │ ├── Chart.yaml |
| </span></span><span style="display:flex;"><span>│ │ ├── templates |
| </span></span><span style="display:flex;"><span>│ │ │ ├── _helpers.tpl |
| </span></span><span style="display:flex;"><span>│ │ │ ├── deployment.yaml |
| </span></span><span style="display:flex;"><span>│ │ │ ├── service.yaml |
| </span></span><span style="display:flex;"><span>│ │ │ └── serviceaccount.yaml |
| </span></span><span style="display:flex;"><span>│ │ └── values.yaml |
| </span></span><span style="display:flex;"><span>│ └── nacos_env |
| </span></span><span style="display:flex;"><span>│ ├── Chart.yaml |
| </span></span><span style="display:flex;"><span>│ ├── templates |
| </span></span><span style="display:flex;"><span>│ │ ├── _helpers.tpl |
| </span></span><span style="display:flex;"><span>│ │ ├── deployment.yaml |
| </span></span><span style="display:flex;"><span>│ │ └── service.yaml |
| </span></span><span style="display:flex;"><span>│ └── values.yaml |
| </span></span><span style="display:flex;"><span>├── cmd |
| </span></span><span style="display:flex;"><span>│ └── app.go |
| </span></span><span style="display:flex;"><span>├── conf |
| </span></span><span style="display:flex;"><span>│ └── dubbogo.yaml |
| </span></span><span style="display:flex;"><span>├── go.mod |
| </span></span><span style="display:flex;"><span>├── go.sum |
| </span></span><span style="display:flex;"><span>└── pkg |
| </span></span><span style="display:flex;"><span> └── service |
| </span></span><span style="display:flex;"><span> └── service.go |
| </span></span></code></pre></div><p>我们编辑 proto 定义我们的接口</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-protobuf" data-lang="protobuf"><span style="display:flex;"><span>syntax <span style="color:#719e07">=</span> <span style="color:#2aa198">&#34;proto3&#34;</span>; |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">package</span> api; |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">option</span> go_package <span style="color:#719e07">=</span> <span style="color:#2aa198">&#34;./;api&#34;</span>; |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">service</span> Generator { |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">rpc</span> GetID (GenReq) <span style="color:#719e07">returns</span> (GenResp) {} |
| </span></span><span style="display:flex;"><span>} |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">message</span> <span style="color:#268bd2">GenReq</span> { |
| </span></span><span style="display:flex;"><span> <span style="color:#dc322f">string</span> appId <span style="color:#719e07">=</span> <span style="color:#2aa198">1</span>; |
| </span></span><span style="display:flex;"><span>} |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">message</span> <span style="color:#268bd2">GenResp</span> { |
| </span></span><span style="display:flex;"><span> <span style="color:#dc322f">string</span> id <span style="color:#719e07">=</span> <span style="color:#2aa198">1</span>; |
| </span></span><span style="display:flex;"><span>} |
| </span></span></code></pre></div><p>生成代码</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-bash" data-lang="bash"><span style="display:flex;"><span>$ <span style="color:#b58900">cd</span> api <span style="color:#719e07">&amp;&amp;</span> protoc --go_out<span style="color:#719e07">=</span>. --go-triple_out<span style="color:#719e07">=</span>. ./api.proto |
| </span></span></code></pre></div><p>我们来调整 <code>service</code> 目录:<code>pkg/service/service.go</code> |
| 修改后的代码如下</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-go" data-lang="go"><span style="display:flex;"><span><span style="color:#268bd2">type</span> GeneratorServerImpl <span style="color:#268bd2">struct</span> { |
| </span></span><span style="display:flex;"><span> api.UnimplementedGeneratorServer |
| </span></span><span style="display:flex;"><span>} |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">func</span> (s <span style="color:#719e07">*</span>GeneratorServerImpl) <span style="color:#268bd2">GetID</span>(ctx context.Context, in <span style="color:#719e07">*</span>api.GenReq) (<span style="color:#719e07">*</span>api.GenResp, <span style="color:#dc322f">error</span>) { |
| </span></span><span style="display:flex;"><span> logger.<span style="color:#268bd2">Infof</span>(<span style="color:#2aa198">&#34;Dubbo-go GeneratorProvider AppId = %s\n&#34;</span>, in.AppId) |
| </span></span><span style="display:flex;"><span> uuid, err <span style="color:#719e07">:=</span> uuid.<span style="color:#268bd2">NewV4</span>() |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">if</span> err <span style="color:#719e07">!=</span> <span style="color:#cb4b16">nil</span> { |
| </span></span><span style="display:flex;"><span> logger.<span style="color:#268bd2">Infof</span>(<span style="color:#2aa198">&#34;Dubbo-go GeneratorProvider get id err = %v\n&#34;</span>, err) |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">return</span> <span style="color:#cb4b16">nil</span>, err |
| </span></span><span style="display:flex;"><span> } |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">return</span> <span style="color:#719e07">&amp;</span>api.GenResp{Id: uuid.<span style="color:#268bd2">String</span>()}, <span style="color:#cb4b16">nil</span> |
| </span></span><span style="display:flex;"><span>} |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">func</span> <span style="color:#268bd2">init</span>() { |
| </span></span><span style="display:flex;"><span> config.<span style="color:#268bd2">SetProviderService</span>(<span style="color:#719e07">&amp;</span>GeneratorServerImpl{}) |
| </span></span><span style="display:flex;"><span>} |
| </span></span></code></pre></div><p>同时,我们调整 <code>conf/dubbogo.yaml</code> 中的 <code>provider</code> 部分,</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-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#268bd2">dubbo</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">registries</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">nacos</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">protocol</span>: nacos |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">address</span>: <span style="color:#2aa198">127.0.0.1</span>:<span style="color:#2aa198">8848</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">protocols</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">triple</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">name</span>: tri |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">port</span>: <span style="color:#2aa198">20000</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">provider</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">services</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">GeneratorServerImpl</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">interface</span>: <span style="color:#2aa198">&#34;&#34;</span> <span style="color:#586e75"># read from stub</span> |
| </span></span></code></pre></div><p>我们需要拉起一个依赖的注册中心 nacos,如果你有现成的,本步骤可以忽略,我们使用 docker 来快速启动一个 nacos</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-bash" data-lang="bash"><span style="display:flex;"><span>git clone https://github.com/nacos-group/nacos-docker.git <span style="color:#719e07">&amp;&amp;</span> <span style="color:#b58900">cd</span> nacos-docker |
| </span></span></code></pre></div><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>docker-compose -f example/standalone-derby.yaml up |
| </span></span></code></pre></div><p>最后,我们启动服务端。</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-go" data-lang="go"><span style="display:flex;"><span>export DUBBO_GO_CONFIG_PATH=conf<span style="color:#719e07">/</span>dubbogo.yaml |
| </span></span></code></pre></div><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-fallback" data-lang="fallback"><span style="display:flex;"><span>go run cmd/app.go |
| </span></span></code></pre></div><p>打开 nacos 的控制台,可以看到服务已经注册</p> |
| <p><img src="https://dubbo.apache.org/imgs/docs3-v2/golang-sdk/quickstart/nacos.jpg" alt="img"></p> |
| <h2 id="2-客户端使用">2. 客户端使用</h2> |
| <p>首先,我们可以共享我们的服务端的 api 给客户端,并生成相关的代码(这里可以根据实际项目需要,共享 proto,每个 consumer 自行生成代码,或统一生成 sdk 后给依赖的服务引入) |
| 客户端目录如下:</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-bash" data-lang="bash"><span style="display:flex;"><span>. |
| </span></span><span style="display:flex;"><span>├── api |
| </span></span><span style="display:flex;"><span>│ ├── api.pb.go |
| </span></span><span style="display:flex;"><span>│ ├── api.proto |
| </span></span><span style="display:flex;"><span>│ └── api_triple.pb.go |
| </span></span><span style="display:flex;"><span>├── cmd |
| </span></span><span style="display:flex;"><span>│ └── client.go |
| </span></span><span style="display:flex;"><span>├── conf |
| </span></span><span style="display:flex;"><span>│ └── dubbogo.yml |
| </span></span><span style="display:flex;"><span>├── go.mod |
| </span></span><span style="display:flex;"><span>├── go.sum |
| </span></span></code></pre></div><p><code>api</code> 目录同服务端的 <code>api</code> 目录 <code>client.go</code> 代码如下:</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-go" data-lang="go"><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">var</span> grpcGeneratorImpl = <span style="color:#b58900">new</span>(api.GeneratorClientImpl) |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">func</span> <span style="color:#268bd2">main</span>() { |
| </span></span><span style="display:flex;"><span> config.<span style="color:#268bd2">SetConsumerService</span>(grpcGeneratorImpl) |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">if</span> err <span style="color:#719e07">:=</span> config.<span style="color:#268bd2">Load</span>(); err <span style="color:#719e07">!=</span> <span style="color:#cb4b16">nil</span> { |
| </span></span><span style="display:flex;"><span> <span style="color:#b58900">panic</span>(err) |
| </span></span><span style="display:flex;"><span> } |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span> logger.<span style="color:#268bd2">Info</span>(<span style="color:#2aa198">&#34;start to test dubbo&#34;</span>) |
| </span></span><span style="display:flex;"><span> req <span style="color:#719e07">:=</span> <span style="color:#719e07">&amp;</span>api.GenReq{ |
| </span></span><span style="display:flex;"><span> AppId: <span style="color:#2aa198">&#34;laurence&#34;</span>, |
| </span></span><span style="display:flex;"><span> } |
| </span></span><span style="display:flex;"><span> reply, err <span style="color:#719e07">:=</span> grpcGeneratorImpl.<span style="color:#268bd2">GetID</span>(context.<span style="color:#268bd2">Background</span>(), req) |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">if</span> err <span style="color:#719e07">!=</span> <span style="color:#cb4b16">nil</span> { |
| </span></span><span style="display:flex;"><span> logger.<span style="color:#268bd2">Error</span>(err) |
| </span></span><span style="display:flex;"><span> } |
| </span></span><span style="display:flex;"><span> logger.<span style="color:#268bd2">Infof</span>(<span style="color:#2aa198">&#34;get id result: %v\n&#34;</span>, reply.Id) |
| </span></span><span style="display:flex;"><span>} |
| </span></span></code></pre></div><p><code>dubbogo.yml</code></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-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#268bd2">dubbo</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">registries</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">nacos</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">protocol</span>: nacos |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">address</span>: <span style="color:#2aa198">127.0.0.1</span>:<span style="color:#2aa198">8848</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">consumer</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">references</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">GeneratorClientImpl</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">protocol</span>: tri |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">interface</span>: <span style="color:#2aa198">&#34;&#34;</span> |
| </span></span></code></pre></div><p>运行 client,获取 id:</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-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#b58900">export</span> <span style="color:#268bd2">DUBBO_GO_CONFIG_PATH</span><span style="color:#719e07">=</span>conf/dubbogo.yml |
| </span></span></code></pre></div><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-fallback" data-lang="fallback"><span style="display:flex;"><span>go run cmd/client.go |
| </span></span></code></pre></div> |
| <div class="alert alert-info" role="alert"> |
| <h4 class="alert-heading">输出结果</h4> |
| <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>…… |
| </span></span><span style="display:flex;"><span>…… |
| </span></span><span style="display:flex;"><span>2022-12-30T20:59:19.971+0800 INFO cmd/client.go:44 start to <span style="color:#b58900">test</span> dubbo |
| </span></span><span style="display:flex;"><span>2022-12-30T20:59:19.982+0800 INFO cmd/client.go:52 get id result: aafd9c73-4014-4d67-a67f-5d107105647b |
| </span></span></code></pre></div> |
| </div> |
| <div class="alert alert-primary" role="alert"> |
| <h4 class="alert-heading">更多</h4> |
| 可以发现注册中心我们是使用 nacos,当然,我们也可以使用其他的注册中心,更多的使用方式,可以参考 <a href="https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/tutorial/develop/registry/">注册中心</a> |
| </div></description></item></channel></rss> |