| <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/preface/</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/preface/index.xml" rel="self" type="application/rss+xml"/><item><title>Overview: 概念体系</title><link>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/preface/concept/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/preface/concept/</guid><description/></item><item><title>Overview: 新特性</title><link>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/preface/3.0_feature/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/preface/3.0_feature/</guid><description> |
| <p><img src="https://shields.io/github/stars/apache/dubbo-go?style=dark" alt="star"></p> |
| <h2 id="1-triple-协议">1. Triple 协议</h2> |
| <h3 id="11-概述">1.1 概述</h3> |
| <p><img src="https://dubbo.apache.org/imgs/docs3-v2/golang-sdk/concept/more/3.0_feature/tri.png" alt="img"></p> |
| <ul> |
| <li> |
| <p>通信层面</p> |
| <p>Triple 协议,也称为Dubbo3协议,是基于HTTP2 + gRPC协议,增加特定字段和逻辑的扩展协议,保证了和<strong>原生gRPC协议互通</strong>。在此基础之上,Triple 新协议将更原生地支持 <strong>Dubbo 服务治理能力</strong>。并支持<strong>流式RPC调用</strong>。</p> |
| <p>简单来说,可以理解为 Triple = gRPC + Dubbo</p> |
| </li> |
| <li> |
| <p>序列化</p> |
| <p>Triple 协议使用高效的<strong>PB序列化方式</strong>,并在此基础之上增加序列化协议的<strong>可扩展支持</strong>。</p> |
| </li> |
| <li> |
| <p>用户开发习惯:</p> |
| <p>Triple 服务在开发前需要<strong>预定义.proto文件</strong>,对于习惯在编码前先定义IDL的Go语言开发者带来便捷。不同于符合java编程习惯的,定义JavaClassName用于描述接口的 Dubbo-go 1.x版本。</p> |
| </li> |
| <li> |
| <p>跨语言互通性:</p> |
| <p>可与 Dubbo-Java 实现<strong>跨语言互通</strong>。</p> |
| </li> |
| </ul> |
| <h2 id="2-应用级服务发现">2. 应用级服务发现</h2> |
| <h3 id="21-简介">2.1 简介</h3> |
| <p><img src="https://dubbo.apache.org/imgs/docs3-v2/golang-sdk/concept/more/3.0_feature/disc.png" alt="img"></p> |
| <p>在服务注册阶段,服务端实例将应用级别的注册信息,主要包含从应用名到实例IP的映射注册到注册中心。在服务发现阶段,客户端实例,通过注册中心获取到需要请求的服务实例IP。进入服务自省阶段,服务自省过程为通过应用信息获取接口信息的过程。如上图,包含两种模式:</p> |
| <ol> |
| <li>remote模式:通过元数据中心(例如 zk )获取应用到接口元数据的映射</li> |
| <li>local模式:直接通过服务端获取应用到接口元数据的映射(通过 Dubbo 协议针对 Metadata Service 发起 RPC 调用)</li> |
| </ol> |
| <p>经过服务自省后,客户端正式向对应实例发起调用。这样做最明显的好处是减少了注册中心的数据量,即注册中心只保存了应用级别的数据。</p> |
| <p>用户在使用 Dubbo-go 3.0的应用级服务发现能力时,可以仿照示例,直接在配置文件中配置服务自省模式和元数据中心信息,引入依赖,开启应用级别服务发现。</p> |
| <h3 id="22-应用级服务发现介绍文章">2.2 应用级服务发现介绍文章</h3> |
| <p><a href="https://baijiahao.baidu.com/s?id=1669266413887039723&amp;wfr=spider&amp;for=pc">应用级服务发现解析</a></p> |
| <h2 id="3-mesh-路由规则">3. Mesh 路由规则</h2> |
| <p>用户可定义路由文件:</p> |
| <p>virtual_service.yaml</p> |
| <p><img src="https://dubbo.apache.org/imgs/docs3-v2/golang-sdk/concept/more/3.0_feature/virtual_service.png" alt="img"></p> |
| <p>以及 dist_rule.yml</p> |
| <p><img src="https://dubbo.apache.org/imgs/docs3-v2/golang-sdk/concept/more/3.0_feature/dest_rule.png" alt="img"></p> |
| <p>框架可根据路由文件针对特定的请求进行流量转发。</p> |
| <h2 id="4-相关文章">4. 相关文章</h2> |
| <p>阿里云官方介绍文章:<a href="https://developer.aliyun.com/article/770964?utm_content=g_1000175535">《Dubbo 3.0 - 开启下一代云原生微服务》</a></p></description></item><item><title>Overview: 代码架构</title><link>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/preface/design/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/preface/design/</guid><description/></item><item><title>Overview: 快速入门</title><link>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/preface/samples/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/preface/samples/</guid><description> |
| <p>为了方便 Dubbo-go 框架用户的使用,我们提供了 Samples 仓库以供用户参考:</p> |
| <p><a href="https://github.com/apache/dubbo-go-samples">【Dubbo-go-samples 仓库地址】</a></p> |
| <h2 id="1-samples-仓库包含的例子">1. Samples 仓库包含的例子</h2> |
| <ul> |
| <li>config-api: 使用 API 进行配置初始化</li> |
| <li>configcenter: 使用不同的配置中心,目前支持三种:zookeeper、apollo、和 nacos</li> |
| <li>context: 如何使用上下文传递 attachment</li> |
| <li>direct: 直连模式</li> |
| <li>game: 游戏服务例子</li> |
| <li>generic: 泛化调用</li> |
| <li>rpc: RPC 调用例子, 包含 Triple、Dubbo等协议以及跨语言/gRPC互通示例</li> |
| <li>helloworld: RPC调用入门例子</li> |
| <li>logger: 日志例子</li> |
| <li>registry: 展示与不同注册中心的对接,包含了 zk、nacos、etcd</li> |
| <li>metrics: 数据上报</li> |
| <li>filter: 使用提供filter和自定义filter的例子</li> |
| <li>registry/servicediscovery:应用级服务发现例子</li> |
| <li>router: 路由例子</li> |
| <li>tracing: 链路追踪例子</li> |
| </ul> |
| <h2 id="2-如何运行">2. 如何运行</h2> |
| <p>目前有三种方式来运行 dubbo-go 的示例:</p> |
| <ol> |
| <li>通过 bash 命令快速开始: 通过简单的命令行启动样例以及进行单元测试</li> |
| <li>在 IDE 中快速开始,这也是<strong>推荐</strong>的方式: 在工程 &ldquo;.run&rdquo; 子目录下,提供了所有示例的 GoLand 运行配置文件,因此用户可以简单在 IDE 中单击运行所有的示例。</li> |
| <li>在 IDE 中手工配置并运行: 为了完整性的目的,也为了万一您不使用 GoLand 而使用其他的 IDE,这里也提供了如何一步一步的配置的指南,帮助用户理解如何在 IDE 中配置,运行或者调试 dubbo-go 的示例。</li> |
| </ol> |
| <h3 id="21-通过-命令行-快速开始">2.1 通过 命令行 快速开始</h3> |
| <p><em>前置条件:需要 docker 环境就绪</em></p> |
| <p>下面我们将使用 &ldquo;helloworld&rdquo; 作为示例:</p> |
| <ol> |
| <li> |
| <p><strong>启动注册中心(比如 zookeeper)</strong></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>make -f build/Makefile docker-up |
| </span></span></code></pre></div><p>当看到类似下面的输出信息时,就表明 zookeeper 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-bash" data-lang="bash"><span style="display:flex;"><span>&gt; Starting dependency services with ./integrate_test/dockercompose/docker-compose.yml |
| </span></span><span style="display:flex;"><span>Docker Compose is now in the Docker CLI, try <span style="color:#586e75">`</span>docker compose up<span style="color:#586e75">`</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span>Creating network <span style="color:#2aa198">&#34;dockercompose_default&#34;</span> with the default driver |
| </span></span><span style="display:flex;"><span>Creating dockercompose_zookeeper_1 ... <span style="color:#719e07">done</span> |
| </span></span><span style="display:flex;"><span>Creating etcd ... <span style="color:#719e07">done</span> |
| </span></span><span style="display:flex;"><span>Creating nacos-standalone ... <span style="color:#719e07">done</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>make -f build/Makefile docker-down |
| </span></span></code></pre></div></li> |
| <li> |
| <p><strong>启动服务提供方</strong></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> helloworld/go-server/cmd |
| </span></span><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><span style="color:#2aa198">&#34;../conf/dubbogo.yml&#34;</span> |
| </span></span><span style="display:flex;"><span>go run . |
| </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>2021/10/27 00:33:10 Connected to 127.0.0.1:2181 |
| </span></span><span style="display:flex;"><span>2021/10/27 00:33:10 Authenticated: <span style="color:#268bd2">id</span><span style="color:#719e07">=</span>72057926938066944, <span style="color:#268bd2">timeout</span><span style="color:#719e07">=</span><span style="color:#2aa198">10000</span> |
| </span></span><span style="display:flex;"><span>2021/10/27 00:33:10 Re-submitting <span style="color:#586e75">`</span>0<span style="color:#586e75">`</span> credentials after reconnect |
| </span></span></code></pre></div></li> |
| <li> |
| <p><strong>运行服务调用方</strong></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> helloworld/go-client/cmd |
| </span></span><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><span style="color:#2aa198">&#34;../conf/dubbogo.yml&#34;</span> |
| </span></span><span style="display:flex;"><span>go run . |
| </span></span></code></pre></div><p>当以下的信息输出时,说明 <code>go-client</code> 调用 <code>go-server</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-bash" data-lang="bash"><span style="display:flex;"><span>2021-10-27T00:40:44.879+0800 DEBUG triple/dubbo3_client.go:106 TripleClient.Invoke: get <span style="color:#268bd2">reply</span> <span style="color:#719e07">=</span> name:<span style="color:#2aa198">&#34;Hello laurence&#34;</span> id:<span style="color:#2aa198">&#34;12345&#34;</span> age:21 |
| </span></span><span style="display:flex;"><span>2021-10-27T00:40:44.879+0800 DEBUG proxy/proxy.go:218 <span style="color:#719e07">[</span>makeDubboCallProxy<span style="color:#719e07">]</span> result: name:<span style="color:#2aa198">&#34;Hello laurence&#34;</span> id:<span style="color:#2aa198">&#34;12345&#34;</span> age:21 , err: &lt;nil&gt; |
| </span></span><span style="display:flex;"><span>2021-10-27T00:40:44.879+0800 INFO cmd/client.go:51 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></li> |
| <li> |
| <p><strong>集成测试</strong> |
| 本项目 dubbo-go-samples 除了用来展示如何使用 dubbo-go 中的功能和特性之外,还被用于 apache/dubbo-go 的集成测试。可以按照以下的步骤来运行针对 <code>go-server</code> 设计的集成测试:</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><span style="color:#b58900">cd</span> helloworld/go-server/cmd |
| </span></span><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><span style="color:#2aa198">&#34;../conf/dubbogo.yml&#34;</span> |
| </span></span><span style="display:flex;"><span>go run . |
| </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> integrate_test/helloworld/tests/integration |
| </span></span><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><span style="color:#2aa198">&#34;../../../../helloworld/go-client/conf/dubbogo.yml&#34;</span> |
| </span></span><span style="display:flex;"><span>go <span style="color:#b58900">test</span> -v |
| </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>&gt; Running integration <span style="color:#b58900">test</span> <span style="color:#719e07">for</span> application go-server |
| </span></span><span style="display:flex;"><span>... |
| </span></span><span style="display:flex;"><span>--- PASS: TestSayHello <span style="color:#719e07">(</span>0.01s<span style="color:#719e07">)</span> |
| </span></span><span style="display:flex;"><span>PASS |
| </span></span><span style="display:flex;"><span>ok github.com/apache/dubbo-go-samples/integrate_test/helloworld/tests/integration 0.119s |
| </span></span></code></pre></div></li> |
| <li> |
| <p><strong>关闭并清理</strong></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>make -f build/Makefile clean docker-down |
| </span></span></code></pre></div></li> |
| </ol> |
| <p><em>以下的两种运行方式都与 IDE 有关。这里我们以 Intellij GoLand 为例来讨论。</em></p> |
| <h3 id="22-在-ide-中快速开始">2.2 在 IDE 中快速开始</h3> |
| <p>一旦在 GoLand 中打开本项目,可以发现,在 &ldquo;Run Configuration&rdquo; 弹出菜单中已经存在了一系列事先配置好了的用来运行相关服务提供方和调用方的选项,例如:&ldquo;helloworld-go-server&rdquo; 和 &ldquo;helloworld-go-client&rdquo;。</p> |
| <p>可以选择其中的任意一个快速启动相关示例。当然在运行之前,假设需要的注册中心已经事先启动了,不然用例将会失败。您可以选择手动自行启动的方式,也可以利用工程中提供的 &ldquo;docker-compose.yml&rdquo; 在启动注册中心的 docker 实例。</p> |
| <h3 id="23在-ide-中手工运行">2.3.在 IDE 中手工运行</h3> |
| <p>这里以 <em>Intellij GoLand</em> 为例。在 GoLand 中打开 dubbo-go-samples 工程之后,按照以下的步骤来运行/调试本示例:</p> |
| <ol> |
| <li> |
| <p><strong>启动 zookeeper 服务器</strong></p> |
| <p>打开 &ldquo;integrate_test/dockercompose/docker-compose.yml&rdquo; 这个文件,然后点击位于编辑器左边 gutter 栏位中的 ▶︎▶︎ 图标运行,&ldquo;Service&rdquo; Tab 应当会弹出并输出类似下面的文本信息:</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>Deploying &#39;Compose: docker&#39;... |
| </span></span><span style="display:flex;"><span>/usr/local/bin/docker-compose -f ...integrate_test/dockercompose/docker-compose.yml up -d |
| </span></span><span style="display:flex;"><span>Creating network &#34;docker_default&#34; with the default driver |
| </span></span><span style="display:flex;"><span>Creating docker_zookeeper_1 ... |
| </span></span><span style="display:flex;"><span>&#39;Compose: docker&#39; has been deployed successfully. |
| </span></span></code></pre></div></li> |
| <li> |
| <p><strong>启动服务提供方</strong></p> |
| <p>打开 &ldquo;helloworld/go-server/cmd/server.go&rdquo; 文件,然后点击左边 gutter 栏位中紧挨着 &ldquo;main&rdquo; 函数的 ▶︎ 图标,并从弹出的菜单中选择 &ldquo;Modify Run Configuration&hellip;&quot;,并确保以下配置的准确:</p> |
| <ul> |
| <li>Working Directory: &ldquo;helloworld/go-server&rdquo; 目录的绝对路径,比如: <em>/home/dubbo-go-samples/helloworld/go-server</em></li> |
| <li>Environment: DUBBO_GO_CONFIG_PATH=&rdquo;../conf/dubbogo.yml&quot;</li> |
| </ul> |
| <p>这样示例中的服务端就准备就绪,随时可以运行了。</p> |
| </li> |
| <li> |
| <p><strong>运行服务消费方</strong></p> |
| <p>打开 &ldquo;helloworld/go-client/cmd/client.go&rdquo; 这个文件,然后从左边 gutter 栏位中点击紧挨着 &ldquo;main&rdquo; 函数的 ▶︎ 图标,然后从弹出的菜单中选择 &ldquo;Modify Run Configuration&hellip;&quot;,并确保以下配置的准确:</p> |
| <ul> |
| <li>Working Directory: &ldquo;helloworld/go-client&rdquo; 目录的绝对路径,比如: <em>/home/dubbo-go-samples/helloworld/go-client</em></li> |
| <li>Environment: DUBBO_GO_CONFIG_PATH=&rdquo;../conf/dubbogo.yml&quot;</li> |
| </ul> |
| <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>[2021-02-03/16:19:30 main.main: client.go: 66] response result: &amp;{A001 Alex Stocks 18 2020-02-04 16:19:30.422 +0800 CST} |
| </span></span></code></pre></div></li> |
| </ol> |
| <p>如果需要调试该示例或者 dubbo-go 框架,可以在 IDE 中从 &ldquo;Run&rdquo; 切换到 &ldquo;Debug&rdquo;。如果要结束的话,直接点击 ◼︎ 就好了。</p></description></item></channel></rss> |