| <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/develop/registry/</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/develop/registry/index.xml" rel="self" type="application/rss+xml"/><item><title>Overview: 了解注册中心</title><link>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/tutorial/develop/registry/desc/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/tutorial/develop/registry/desc/</guid><description> |
| <h2 id="什么是注册中心">什么是注册中心</h2> |
| <p>所谓的注册中心,可以简单的理解为手机的通讯录。通讯录的目的是方便我们记录朋友、同事、家人等联系方式。一般的存储方式格式都是:姓名&ndash;联系方式,当我们需要联系某个人时,打开我们的通讯,找到他的名字,拨打电话。</p> |
| <p>注册中心要做的事情,也是类似的。它记录了服务和服务地址的映射关系。在分布式架构中,服务会注册到这里,当服务需要调用其它服务时,就到这里找到服务的地址,进行调用。</p> |
| <h2 id="为什么需要注册中心">为什么需要注册中心</h2> |
| <p>随着单体应用拆分,首当面临的第一份挑战就是服务实例的数量较多,并且服务自身对外暴露的访问地址也具有动态性。以及微服务架构的发展,越来越多的设计中采用微服务架构。在微服务中首先需要面对的问题就是不同的服务之间如何进行通信。在单体服务中如果不同的服务之间需要通信,一般就是服务将接口暴露,然后其他的服务通过配置文件记录依赖服务的地址即可。在分布式系统中,这种方案是明显不合适的。分布式系统会变得更加复杂,比如:</p> |
| <ul> |
| <li>新服务上线后,如何被及时发现</li> |
| <li>服务宕机后,如何及时下线</li> |
| <li>服务如何有效的水平扩展</li> |
| <li>服务发现时,如何进行路由</li> |
| <li>服务异常时,如何进行降级</li> |
| </ul> |
| <p>这里问题的解决都依赖于注册中心。 |
| 为了有效的解决这些问题,我们可以把这些问题全部交给注册中心去解决,这样,不同的服务只需要关注自身的业务和设计实现即可。</p> |
| <h2 id="dubbo-go支持的注册中心">dubbo-go支持的注册中心</h2> |
| <h3 id="nacos">Nacos</h3> |
| <p>Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。</p> |
| <p>Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。</p> |
| <p>Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。</p> |
| <p>官网:https://nacos.io/</p> |
| <h3 id="zookeeper">Zookeeper</h3> |
| <p>ZooKeeper 是 Apache 软件基金会的一个软件项目,它为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册。</p> |
| <p>ZooKeeper 的架构通过冗余服务实现高可用性。</p> |
| <p>Zookeeper 的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。</p> |
| <p>一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。</p> |
| <p>官网:https://zookeeper.apache.org/</p> |
| <h3 id="polaris">Polaris</h3> |
| <p>北极星是腾讯开源的服务治理平台,致力于解决分布式和微服务架构中的服务管理、流量管理、配置管理、故障容错和可观测性问题,针对不同的技术栈和环境提供服务治理的标准方案和最佳实践。下面介绍北极星的应用场景、功能特性、系统组件和常见问题。</p> |
| <p>官网:https://polarismesh.cn/</p></description></item><item><title>Overview: 应用级服务发现</title><link>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/tutorial/develop/registry/service-discovery/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/tutorial/develop/registry/service-discovery/</guid><description> |
| <p>参考文章<a href="https://baijiahao.baidu.com/s?id=1669266413887039723&amp;wfr=spider&amp;for=pc"><strong>《Dubbo 迈出云原生重要一步 应用级服务发现解析》</strong></a></p> |
| <p>参考仓库:<a href="https://github.com/apache/dubbo-go-samples/tree/master/registry/servicediscovery">dubbo-go-samples/registry/serivcediscovery</a></p> |
| <h2 id="配置方案">配置方案</h2> |
| <ul> |
| <li>Consumer 端</li> |
| </ul> |
| <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">demoZK</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">registry-type</span>: service <span style="color:#586e75"># 指定该注册中心为应用级服务发现,不填默认为接口级</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">metadata-report</span>: <span style="color:#586e75"># 定义元数据中心</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">protocol</span>: nacos <span style="color:#586e75"># 元数据中心可选nacos/zk</span> |
| </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">GreeterClientImpl</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>: com.apache.dubbo.sample.basic.IGreeter |
| </span></span></code></pre></div><ul> |
| <li>Provider 端</li> |
| </ul> |
| <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">demoZK</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">registry-type</span>: service <span style="color:#586e75"># 指定该注册中心为应用级服务发现,不填默认为接口级</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">metadata-report</span>: <span style="color:#586e75"># 定义元数据中心</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">protocol</span>: nacos <span style="color:#586e75"># 元数据中心可选nacos/zk</span> |
| </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">GreeterProvider</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">interface</span>: com.apache.dubbo.sample.basic.IGreeter |
| </span></span></code></pre></div><p>相比于常规配置,定义好registry-type: service, 并且定义好元数据中心后,将会使用应用级服务注册/服务发现。</p></description></item><item><title>Overview: 注册中心配置</title><link>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/tutorial/develop/registry/registry/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/tutorial/develop/registry/registry/</guid><description> |
| <p>参考samples <a href="https://github.com/apache/dubbo-go-samples/tree/master/registry">dubbo-go-samples/registry</a></p> |
| <h2 id="registry-注册中心配置">Registry 注册中心配置</h2> |
| <ul> |
| <li><strong>Nacos 注册中心</strong></li> |
| </ul> |
| <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">application</span>: <span style="color:#586e75"># 应用信息,服务启动后会将相关信息注册到注册中心,可被客户端从 url 中识别</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">name</span>: myApp <span style="color:#586e75"># application=myApp; name=myApp</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">module</span>: opensource <span style="color:#586e75"># module=opensource</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">organization</span>: dubbo <span style="color:#586e75"># organization=dubbo</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">owner</span>: laurence <span style="color:#586e75"># owner=laurence</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">version</span>: myversion <span style="color:#586e75"># app.version=myversion</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">environment</span>: pro <span style="color:#586e75"># environment=pro</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">nacosWithCustomGroup</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">protocol</span>: nacos <span style="color:#586e75"># 注册中心选择 nacos </span> |
| </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 style="color:#586e75"># nacos ip</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">group</span>: myGroup <span style="color:#586e75"># nacos group, 默认 DEFAULT_GROUP</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">namespace</span>: 9fb00abb-278d-42fc-96bf-e0151601e4a1 <span style="color:#586e75"># nacos namespaceID, should be created before. 默认public</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">username</span>: abc |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">password</span>: abc |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">protocols</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">dubbo</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">name</span>: dubbo |
| </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">UserProviderWithCustomGroupAndVersion</span>: <span style="color:#586e75"># 接口三元组:接口名、版本号、分组。client 和 server 需要保持一致。</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">interface</span>: org.apache.dubbo.UserProvider.Test <span style="color:#586e75"># 接口名必填</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">version</span>: myInterfaceVersion <span style="color:#586e75"># 默认为空</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">group</span>: myInterfaceGroup <span style="color:#586e75"># 默认为空</span> |
| </span></span></code></pre></div><p>dubbogo 的注册中心配置的 group、namespace、username、password,均与 nacos 相关概念对应。</p> |
| <ul> |
| <li><strong>Zookeeper 注册中心</strong></li> |
| </ul> |
| <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:#586e75"># application: 与nacos 一致,不再赘述</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">demoZK</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">protocol</span>: zookeeper <span style="color:#586e75"># 注册中心选择 nacos </span> |
| </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">2181</span> <span style="color:#586e75"># zookeeper ip</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">group</span>: myGroup <span style="color:#586e75"># nacos group, 默认 dubbo</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">UserProviderWithCustomGroupAndVersion</span>: <span style="color:#586e75"># 接口三元组:接口名、版本号、分组。client 和 server 需要保持一致。</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">interface</span>: com.apache.dubbo.sample.basic.IGreeter <span style="color:#586e75"># 接口名必填</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">version</span>: myInterfaceVersion <span style="color:#586e75"># 默认为空</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">group</span>: myInterfaceGroup <span style="color:#586e75"># 默认为空</span> |
| </span></span></code></pre></div><p>zookeeper 注册时,provider 端将接口信息注册在<code> /$(group)/$(interface)/providers</code> 节点,以上面配置为例,注册的 zk path 为 <code>/myGroup/com.apache.dubbo.sample.basic.IGreeter/providers/</code></p> |
| <p>consumer 端注册在 /$(group)/$(interface)/consumers 作统计用。</p> |
| <ul> |
| <li><strong>ETCD 注册中心</strong></li> |
| </ul> |
| <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">etcd</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">protocol</span>: etcdv3 |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">timeout</span>: 3s |
| </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">2379</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">dubbo</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">name</span>: dubbo |
| </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">UserProvider</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">interface</span>: org.apache.dubbo.UserProvider |
| </span></span></code></pre></div><ul> |
| <li><strong>应用级服务注册发现</strong></li> |
| </ul> |
| <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">demoZK</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">protocol</span>: zookeeper <span style="color:#586e75"># nacos/zookeeper</span> |
| </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">2181</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">registry-type</span>: service <span style="color:#586e75"># 使用应用级服务发现</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">metadata-report</span>: <span style="color:#586e75"># 配置元数据中心</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">protocol</span>: zookeeper |
| </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">2181</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">GreeterProvider</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">interface</span>: com.apache.dubbo.sample.basic.IGreeter |
| </span></span></code></pre></div></description></item><item><title>Overview: 使用 Nacos 作为注册中心</title><link>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/tutorial/develop/registry/nacos-2/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/tutorial/develop/registry/nacos-2/</guid><description> |
| <h2 id="1-准备工作">1. 准备工作</h2> |
| <ul> |
| <li>dubbo-go cli 工具和依赖工具已安装</li> |
| <li>创建一个新的 demo 应用</li> |
| <li>启动一个 Nacos 实例,暴露 8848 端口</li> |
| </ul> |
| <h2 id="2-配置注册中心">2. 配置注册中心</h2> |
| <p>修改服务端配置 go-server/conf/dubbogo.yaml</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 style="color:#586e75"># 配置 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 style="color:#586e75"># 指定 Nacos 地址</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">GreeterProvider</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 pb</span> |
| </span></span></code></pre></div><p>修改客户端配置 go-client/conf/dubbogo.yaml</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">GreeterClientImpl</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 style="color:#586e75"># read from pb</span> |
| </span></span></code></pre></div><h2 id="3-使用-nacos-进行服务发现">3. 使用 Nacos 进行服务发现</h2> |
| <ul> |
| <li> |
| <p>启动go-server/cmd,查看日志</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:#719e07">[</span>Nacos Registry<span style="color:#719e07">]</span> Registry instance with param ... |
| </span></span></code></pre></div><p>日志中包含 Nacos 注册信息,将当前服务接口注册在 Nacos。</p> |
| <p>可登陆控制台 http://localhost:8848/nacos 查看注册的服务</p> |
| </li> |
| <li> |
| <p>启动 go-client/cmd 查看日志</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> [Nacos Registry] Update begin, service event: ServiceEvent{Action{add}, Path{tri://xxx.xxx.xxx.xxx:20000/api.Greeter ... |
| </span></span></code></pre></div><p>日志中包含 Nacos 注册组件的订阅事件信息,获取到服务端 IP 和端口号,显示调用成功。</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>client response result: name:&#34;Hello laurence&#34; id:&#34;12345&#34; age:21 |
| </span></span></code></pre></div></li> |
| </ul> |
| <h2 id="4-更多支持的注册中心">4. 更多支持的注册中心</h2> |
| <p>参考 <a href="https://github.com/apache/dubbo-go-samples/tree/master/registry">dubbo-go-samples/registry</a></p></description></item><item><title>Overview: 使用 Nacos 作为注册中心</title><link>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/tutorial/develop/registry/nacos/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/tutorial/develop/registry/nacos/</guid><description> |
| <h2 id="1-准备工作">1. 准备工作</h2> |
| <ul> |
| <li>dubbo-go cli 工具和依赖工具已安装</li> |
| <li>创建一个新的 demo 应用</li> |
| </ul> |
| <h2 id="2-使用-grpc_cli-工具进行-dubbo-服务调试">2. 使用 grpc_cli 工具进行 Dubbo 服务调试</h2> |
| <h3 id="21-开启服务端">2.1 开启服务端</h3> |
| <p>示例:user.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-go" data-lang="go"><span style="display:flex;"><span><span style="color:#268bd2">func</span> (u <span style="color:#719e07">*</span>UserProvider) <span style="color:#268bd2">GetUser</span>(ctx context.Context, userStruct <span style="color:#719e07">*</span>CallUserStruct) (<span style="color:#719e07">*</span>User, <span style="color:#dc322f">error</span>) { |
| </span></span><span style="display:flex;"><span> fmt.<span style="color:#268bd2">Printf</span>(<span style="color:#2aa198">&#34;=======================\nreq:%#v\n&#34;</span>, userStruct) |
| </span></span><span style="display:flex;"><span> rsp <span style="color:#719e07">:=</span> User{<span style="color:#2aa198">&#34;A002&#34;</span>, <span style="color:#2aa198">&#34;Alex Stocks&#34;</span>, <span style="color:#2aa198">18</span>, userStruct.SubInfo} |
| </span></span><span style="display:flex;"><span> fmt.<span style="color:#268bd2">Printf</span>(<span style="color:#2aa198">&#34;=======================\nrsp:%#v\n&#34;</span>, rsp) |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">return</span> <span style="color:#719e07">&amp;</span>rsp, <span style="color:#cb4b16">nil</span> |
| </span></span><span style="display:flex;"><span>} |
| </span></span></code></pre></div><p>服务端开启一个服务,名为GetUser,传入一个CallUserStruct的参数,返回一个User参数<br> |
| CallUserStruct参数定义:</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> CallUserStruct <span style="color:#268bd2">struct</span> { |
| </span></span><span style="display:flex;"><span> ID <span style="color:#dc322f">string</span> |
| </span></span><span style="display:flex;"><span> Male <span style="color:#dc322f">bool</span> |
| </span></span><span style="display:flex;"><span> SubInfo SubInfo <span style="color:#586e75">// 嵌套子结构 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span>} |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">func</span> (cs CallUserStruct) <span style="color:#268bd2">JavaClassName</span>() <span style="color:#dc322f">string</span> { |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">return</span> <span style="color:#2aa198">&#34;com.ikurento.user.CallUserStruct&#34;</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">type</span> SubInfo <span style="color:#268bd2">struct</span> { |
| </span></span><span style="display:flex;"><span> SubID <span style="color:#dc322f">string</span> |
| </span></span><span style="display:flex;"><span> SubMale <span style="color:#dc322f">bool</span> |
| </span></span><span style="display:flex;"><span> SubAge <span style="color:#dc322f">int</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> (s SubInfo) <span style="color:#268bd2">JavaClassName</span>() <span style="color:#dc322f">string</span> { |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">return</span> <span style="color:#2aa198">&#34;com.ikurento.user.SubInfo&#34;</span> |
| </span></span><span style="display:flex;"><span>} |
| </span></span></code></pre></div><p>User结构定义:</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> User <span style="color:#268bd2">struct</span> { |
| </span></span><span style="display:flex;"><span> Id <span style="color:#dc322f">string</span> |
| </span></span><span style="display:flex;"><span> Name <span style="color:#dc322f">string</span> |
| </span></span><span style="display:flex;"><span> Age <span style="color:#dc322f">int32</span> |
| </span></span><span style="display:flex;"><span> SubInfo SubInfo <span style="color:#586e75">// 嵌套上述子结构SubInfo |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span>} |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">func</span> (u <span style="color:#719e07">*</span>User) <span style="color:#268bd2">JavaClassName</span>() <span style="color:#dc322f">string</span> { |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">return</span> <span style="color:#2aa198">&#34;com.ikurento.user.User&#34;</span> |
| </span></span><span style="display:flex;"><span>} |
| </span></span></code></pre></div><p>开启服务:</p> |
| <p><code>cd server </code><br> |
| <code>source builddev.sh</code><br> |
| <code>go run .</code></p> |
| <h3 id="22-定义请求体打解包协议">2.2 定义请求体(打解包协议)</h3> |
| <p>请求体定义为json文件,约定键值均为string<br> |
| 键对应go语言struct字段名例如&quot;ID&quot;、&ldquo;Name&rdquo; ,值对应&quot;type@val&quot;<br> |
| 其中type支持string int bool time,val使用string 来初始化,如果只填写type则初始化为零值。 |
| 约定每个struct必须有JavaClassName字段,务必与server端严格对应</p> |
| <p>见userCall.json:</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-json" data-lang="json"><span style="display:flex;"><span>{ |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;ID&#34;</span>: <span style="color:#2aa198">&#34;string@A000&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;Male&#34;</span>: <span style="color:#2aa198">&#34;bool@true&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;SubInfo&#34;</span>: { |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;SubID&#34;</span>: <span style="color:#2aa198">&#34;string@A001&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;SubMale&#34;</span>: <span style="color:#2aa198">&#34;bool@false&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;SubAge&#34;</span>: <span style="color:#2aa198">&#34;int@18&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;JavaClassName&#34;</span>:<span style="color:#2aa198">&#34;string@com.ikurento.user.SubInfo&#34;</span> |
| </span></span><span style="display:flex;"><span> }, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;JavaClassName&#34;</span>: <span style="color:#2aa198">&#34;string@com.ikurento.user.CallUserStruct&#34;</span> |
| </span></span><span style="display:flex;"><span>} |
| </span></span></code></pre></div><p>userCall.json将参数CallUserStruct的结构及子结构SubInfo都定义了出来,并且给请求参数赋值。</p> |
| <p>user.json 同理,作为返回值不需要赋初始值,但JavaClassName字段一定与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-go" data-lang="go"><span style="display:flex;"><span>{ |
| </span></span><span style="display:flex;"><span> <span style="color:#2aa198">&#34;ID&#34;</span>: <span style="color:#2aa198">&#34;string&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#2aa198">&#34;Name&#34;</span>: <span style="color:#2aa198">&#34;string&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#2aa198">&#34;Age&#34;</span>: <span style="color:#2aa198">&#34;int&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#2aa198">&#34;JavaClassName&#34;</span>: <span style="color:#2aa198">&#34;string@com.ikurento.user.User&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#2aa198">&#34;SubInfo&#34;</span>: { |
| </span></span><span style="display:flex;"><span> <span style="color:#2aa198">&#34;SubID&#34;</span>: <span style="color:#2aa198">&#34;string&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#2aa198">&#34;SubMale&#34;</span>: <span style="color:#2aa198">&#34;bool&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#2aa198">&#34;SubAge&#34;</span>: <span style="color:#2aa198">&#34;int&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#2aa198">&#34;JavaClassName&#34;</span>:<span style="color:#2aa198">&#34;string@com.ikurento.user.SubInfo&#34;</span> |
| </span></span><span style="display:flex;"><span> } |
| </span></span><span style="display:flex;"><span>} |
| </span></span></code></pre></div><h3 id="23-执行请求">2.3 执行请求</h3> |
| <p><code>dubbogo-cli call --h=localhost --p 20001 --proto=dubbo --i=com.ikurento.user.UserProvider --method=GetUser --sendObj=&quot;./userCall.json&quot; --recvObj=&quot;./user.json&quot;</code></p> |
| <p>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-fallback" data-lang="fallback"><span style="display:flex;"><span>2020/10/26 20:47:45 Created pkg: |
| </span></span><span style="display:flex;"><span>2020/10/26 20:47:45 &amp;{ID:A000 Male:true SubInfo:0xc00006ea20 JavaClassName:com.ikurento.user.CallUserStruct} |
| </span></span><span style="display:flex;"><span>2020/10/26 20:47:45 SubInfo: |
| </span></span><span style="display:flex;"><span>2020/10/26 20:47:45 &amp;{SubID:A001 SubMale:false SubAge:18 JavaClassName:com.ikurento.user.SubInfo} |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span>2020/10/26 20:47:45 Created pkg: |
| </span></span><span style="display:flex;"><span>2020/10/26 20:47:45 &amp;{ID: Name: Age:0 JavaClassName:com.ikurento.user.User SubInfo:0xc00006ec90} |
| </span></span><span style="display:flex;"><span>2020/10/26 20:47:45 SubInfo: |
| </span></span><span style="display:flex;"><span>2020/10/26 20:47:45 &amp;{SubID: SubMale:false SubAge:0 JavaClassName:com.ikurento.user.SubInfo} |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span>2020/10/26 20:47:45 connected to localhost:20001! |
| </span></span><span style="display:flex;"><span>2020/10/26 20:47:45 try calling interface:com.ikurento.user.UserProvider.GetUser |
| </span></span><span style="display:flex;"><span>2020/10/26 20:47:45 with protocol:dubbo |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span>2020/10/26 20:47:45 After 3ms , Got Rsp: |
| </span></span><span style="display:flex;"><span>2020/10/26 20:47:45 &amp;{ID:A002 Name:Alex Stocks Age:18 JavaClassName: SubInfo:0xc0001241b0} |
| </span></span><span style="display:flex;"><span>2020/10/26 20:47:45 SubInfo: |
| </span></span><span style="display:flex;"><span>2020/10/26 20:47:45 &amp;{SubID:A001 SubMale:false SubAge:18 JavaClassName:}``` |
| </span></span></code></pre></div><p>可看到详细的请求体赋值情况,以及返回结果和耗时。支持嵌套结构</p> |
| <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-fallback" data-lang="fallback"><span style="display:flex;"><span>======================= |
| </span></span><span style="display:flex;"><span>req:&amp;main.CallUserStruct{ID:&#34;A000&#34;, Male:true, SubInfo:main.SubInfo{SubID:&#34;A001&#34;, SubMale:false, SubAge:18}} |
| </span></span><span style="display:flex;"><span>======================= |
| </span></span></code></pre></div><p>可见接收到了来自cli的数据</p></description></item><item><title>Overview: 使用 Zookeeper 作为注册中心</title><link>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/tutorial/develop/registry/zookeeper/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/tutorial/develop/registry/zookeeper/</guid><description> |
| <h2 id="1-准备工作">1. 准备工作</h2> |
| <ul> |
| <li>dubbo-go cli 工具和依赖工具已安装</li> |
| <li>创建一个新的 demo 应用</li> |
| <li>准备 Zookeeper 实例</li> |
| </ul> |
| <h2 id="2-配置注册中心">2. 配置注册中心</h2> |
| <p>修改服务端配置 go-server/conf/dubbogo.yaml</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">demoZK</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">protocol</span>: zookeeper |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">timeout</span>: 3s |
| </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">2181</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">group</span>: myGroup <span style="color:#586e75"># default is dubbo</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">registry-type</span>: interface |
| </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">GreeterProvider</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">interface</span>: com.apache.dubbo.sample.basic.IGreeter <span style="color:#586e75"># must be compatible with grpc or dubbo-java</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">UserProviderWithCustomGroupAndVersion</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">interface</span>: com.apache.dubbo.sample.basic.IGreeter2 |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">version</span>: myInterfaceVersion <span style="color:#586e75"># dubbo interface version must be same with client</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">group</span>: myInterfaceGroup <span style="color:#586e75"># dubbo interface group must be same with client</span> |
| </span></span></code></pre></div><p>修改客户端配置 go-client/conf/dubbogo.yaml</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">demoZK</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">protocol</span>: zookeeper |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">timeout</span>: 3s |
| </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">2181</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">group</span>: myGroup |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">registry-type</span>: interface |
| </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">GreeterClientImpl</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>: com.apache.dubbo.sample.basic.IGreeter <span style="color:#586e75"># must be compatible with grpc or dubbo-java</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">UserProviderWithCustomGroupAndVersion</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>: com.apache.dubbo.sample.basic.IGreeter2 <span style="color:#586e75"># must be compatible with grpc or dubbo-java</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">group</span>: myInterfaceGroup <span style="color:#586e75"># dubbo interface group must be same with server</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">version</span>: myInterfaceVersion <span style="color:#586e75"># dubbo interface version must be same with server</span> |
| </span></span></code></pre></div><h2 id="3-使用-zookeeper-进行服务发现">3. 使用 Zookeeper 进行服务发现</h2> |
| <ul> |
| <li> |
| <p>启动go-server/cmd,查看日志</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>INFO zookeeper/registry.go:217 <span style="color:#719e07">[</span>Zookeeper Registry<span style="color:#719e07">]</span> Registry instance with <span style="color:#268bd2">root</span> <span style="color:#719e07">=</span> /myGroup/com.apache.dubbo.sample.basic.IGreeter/providers |
| </span></span></code></pre></div><p>日志中包含 Zookeeper 注册信息,将当前服务接口注册在 Zookeeper</p> |
| </li> |
| <li> |
| <p>启动 go-client/cmd 查看日志</p> |
| <p>日志中包含 Zookeeper 注册组件的订阅事件信息,获取到服务端 IP 和端口号,显示调用成功。</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-gdscript3" data-lang="gdscript3"><span style="display:flex;"><span> zookeeper<span style="color:#719e07">/</span>registry<span style="color:#719e07">.</span>go:<span style="color:#2aa198">217</span> [Zookeeper Registry] Registry instance with root <span style="color:#719e07">=</span> <span style="color:#719e07">/</span>myGroup<span style="color:#719e07">/</span>com<span style="color:#719e07">.</span>apache<span style="color:#719e07">.</span>dubbo<span style="color:#719e07">.</span>sample<span style="color:#719e07">.</span>basic<span style="color:#719e07">.</span>IGreeter<span style="color:#719e07">/</span>consumers, node <span style="color:#719e07">=</span> consumer<span style="color:#719e07">%</span><span style="color:#2aa198">3</span>A<span style="color:#719e07">%</span><span style="color:#2aa198">2</span>F<span style="color:#719e07">%</span><span style="color:#2aa198">2</span>F172<span style="color:#719e07">.</span><span style="color:#2aa198">22.91</span><span style="color:#719e07">.</span><span style="color:#2aa198">1</span><span style="color:#719e07">%</span><span style="color:#2aa198">2</span>Fcom<span style="color:#719e07">.</span>apache<span style="color:#719e07">.</span>dubbo<span style="color:#719e07">.</span>sample<span style="color:#719e07">.</span>basic<span style="color:#719e07">.</span>IGreeter<span style="color:#719e07">%</span><span style="color:#2aa198">3</span>Fapp<span style="color:#719e07">.</span>version<span style="color:#719e07">%</span><span style="color:#2aa198">3</span>D<span style="color:#719e07">%</span><span style="color:#2aa198">26</span>application<span style="color:#719e07">%</span><span style="color:#2aa198">3</span>Ddubbo<span style="color:#719e07">.</span>io<span style="color:#719e07">%</span><span style="color:#2aa198">26</span>async<span style="color:#719e07">%</span><span style="color:#2aa198">3</span>Dfalse<span style="color:#719e07">%</span><span style="color:#2aa198">26</span>bean<span style="color:#719e07">.</span>name<span style="color:#719e07">%</span><span style="color:#2aa198">3</span>DGreeterClientImpl<span style="color:#719e07">%</span><span style="color:#2aa198">26</span>cluster<span style="color:#719e07">%</span><span style="color:#2aa198">3</span>Dfailover<span style="color:#719e07">%</span><span style="color:#2aa198">26</span>config<span style="color:#719e07">.</span>tracing<span style="color:#719e07">%</span><span style="color:#2aa198">3</span>D<span style="color:#719e07">%</span><span style="color:#2aa198">26</span>environment<span style="color:#719e07">%</span><span style="color:#2aa198">3</span>D<span style="color:#719e07">%</span><span style="color:#2aa198">26</span>generic<span style="color:#719e07">%</span><span style="color:#2aa198">3</span>D<span style="color:#719e07">%</span><span style="color:#2aa198">26</span>group<span style="color:#719e07">%</span><span style="color:#2aa198">3</span>D<span style="color:#719e07">%</span><span style="color:#2aa198">26</span>interface<span style="color:#719e07">%</span><span style="color:#2aa198">3</span>Dcom<span style="color:#719e07">.</span>apache<span style="color:#719e07">.</span>dubbo<span style="color:#719e07">.</span>sample<span style="color:#719e07">.</span>basic<span style="color:#719e07">.</span>IGreeter<span style="color:#719e07">%</span><span style="color:#2aa198">26</span>loadbalance<span style="color:#719e07">%</span><span style="color:#2aa198">3</span>D<span style="color:#719e07">%</span><span style="color:#2aa198">26</span>metadata<span style="color:#719e07">-</span>type<span style="color:#719e07">%</span><span style="color:#2aa198">3</span>Dlocal<span style="color:#719e07">%</span><span style="color:#2aa198">26</span>module<span style="color:#719e07">%</span><span style="color:#2aa198">3</span>Dsample<span style="color:#719e07">%</span><span style="color:#2aa198">26</span>name<span style="color:#719e07">%</span><span style="color:#2aa198">3</span>Ddubbo<span style="color:#719e07">.</span>io<span style="color:#719e07">%</span><span style="color:#2aa198">26</span>organization<span style="color:#719e07">%</span><span style="color:#2aa198">3</span>Ddubbo<span style="color:#719e07">-</span>go<span style="color:#719e07">%</span><span style="color:#2aa198">26</span>owner<span style="color:#719e07">%</span><span style="color:#2aa198">3</span>Ddubbo<span style="color:#719e07">-</span>go<span style="color:#719e07">%</span><span style="color:#2aa198">26</span>protocol<span style="color:#719e07">%</span><span style="color:#2aa198">3</span>Dtri<span style="color:#719e07">%</span><span style="color:#2aa198">26</span>provided<span style="color:#719e07">-</span>by<span style="color:#719e07">%</span><span style="color:#2aa198">3</span>D<span style="color:#719e07">%</span><span style="color:#2aa198">26</span>reference<span style="color:#719e07">.</span>filter<span style="color:#719e07">%</span><span style="color:#2aa198">3</span>Dcshutdown<span style="color:#719e07">%</span><span style="color:#2aa198">26</span>registry<span style="color:#719e07">.</span>role<span style="color:#719e07">%</span><span style="color:#2aa198">3</span>D0<span style="color:#719e07">%</span><span style="color:#2aa198">26</span>release<span style="color:#719e07">%</span><span style="color:#2aa198">3</span>Ddubbo<span style="color:#719e07">-</span>golang<span style="color:#719e07">-</span><span style="color:#2aa198">3.0</span><span style="color:#719e07">.</span><span style="color:#2aa198">4</span><span style="color:#719e07">%</span><span style="color:#2aa198">26</span>retries<span style="color:#719e07">%</span><span style="color:#2aa198">3</span>D<span style="color:#719e07">%</span><span style="color:#2aa198">26</span>serialization<span style="color:#719e07">%</span><span style="color:#2aa198">3</span>D<span style="color:#719e07">%</span><span style="color:#2aa198">26</span>side<span style="color:#719e07">%</span><span style="color:#2aa198">3</span>Dconsumer<span style="color:#719e07">%</span><span style="color:#2aa198">26</span>sticky<span style="color:#719e07">%</span><span style="color:#2aa198">3</span>Dfalse<span style="color:#719e07">%</span><span style="color:#2aa198">26</span>timestamp<span style="color:#719e07">%</span><span style="color:#2aa198">3</span>D1675407574<span style="color:#719e07">%</span><span style="color:#2aa198">26</span>version<span style="color:#719e07">%</span><span style="color:#2aa198">3</span>D |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span>cmd<span style="color:#719e07">/</span>client<span style="color:#719e07">.</span>go:<span style="color:#2aa198">54</span> start to test dubbo |
| </span></span><span style="display:flex;"><span>cmd<span style="color:#719e07">/</span>client<span style="color:#719e07">.</span>go:<span style="color:#2aa198">62</span> client response result: name:<span style="color:#2aa198">&#34;Hello laurence&#34;</span> id:<span style="color:#2aa198">&#34;12345&#34;</span> age:<span style="color:#2aa198">21</span> |
| </span></span><span style="display:flex;"><span>cmd<span style="color:#719e07">/</span>client<span style="color:#719e07">.</span>go:<span style="color:#2aa198">68</span> client response result: name:<span style="color:#2aa198">&#34;Hello laurence from UserProviderWithCustomRegistryGroupAndVersion&#34;</span> id:<span style="color:#2aa198">&#34;12345&#34;</span> age:<span style="color:#2aa198">21</span> |
| </span></span></code></pre></div></li> |
| <li> |
| <p>同时,我们可以直接查看zk中的数据如下:</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:#719e07">[</span>zk: localhost:2181<span style="color:#719e07">(</span>CONNECTED<span style="color:#719e07">)</span> 6<span style="color:#719e07">]</span> ls / |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">[</span>zookeeper, myGroup<span style="color:#719e07">]</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">[</span>zk: localhost:2181<span style="color:#719e07">(</span>CONNECTED<span style="color:#719e07">)</span> 7<span style="color:#719e07">]</span> ls /myGroup |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">[</span>com.apache.dubbo.sample.basic.IGreeter2, com.apache.dubbo.sample.basic.IGreeter<span style="color:#719e07">]</span> |
| </span></span></code></pre></div></li> |
| </ul> |
| <h2 id="4-更多支持的注册中心">4. 更多支持的注册中心</h2> |
| <p>参考 <a href="https://github.com/apache/dubbo-go-samples/tree/master/registry">dubbo-go-samples/registry</a></p></description></item><item><title>Overview: 使用 Polaris 作为注册中心</title><link>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/tutorial/develop/registry/polaris/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/tutorial/develop/registry/polaris/</guid><description> |
| <h2 id="1准备工作">1.准备工作</h2> |
| <ul> |
| <li> |
| <p>假设您已经准备好demo工程,如果不清楚,可以参考前面的文章</p> |
| </li> |
| <li> |
| <p>北极星服务端安装</p> |
| <p><a href="https://polarismesh.cn/docs/%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/%E6%9C%8D%E5%8A%A1%E7%AB%AF%E5%AE%89%E8%A3%85/%E5%8D%95%E6%9C%BA%E7%89%88%E5%AE%89%E8%A3%85/">北极星服务端单机版本安装文档</a></p> |
| <p><a href="https://polarismesh.cn/docs/%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/%E6%9C%8D%E5%8A%A1%E7%AB%AF%E5%AE%89%E8%A3%85/%E9%9B%86%E7%BE%A4%E7%89%88%E5%AE%89%E8%A3%85/">北极星服务端集群版本安装文档</a></p> |
| </li> |
| </ul> |
| <h2 id="2使用polaris作为注册中心">2.使用Polaris作为注册中心</h2> |
| <h3 id="21dubbogoyaml-配置文件">2.1dubbogo.yaml 配置文件</h3> |
| <p>当前 PolarisMesh 已实现了 dubbogo 的注册发现扩展点,因此你只需要调整你的 dubbogo.yaml 文件中的 registries 配置项,新增 protocol 为 polaris 的注册中心配置即可,可以参考下面的样例。</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">polarisMesh</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">protocol</span>: polaris |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">address</span>: ${北极星服务端IP}:8091 |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">namespace</span>: ${北极星命名空间信息} |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">token</span>: ${北极星资源鉴权 token} <span style="color:#586e75"># 如果北极星服务端开启了针对客户端的鉴权,则需要配置该参数</span> |
| </span></span></code></pre></div><h3 id="22运行服务提供者">2.2运行服务提供者</h3> |
| <p>进入 go-server 的 cmd 目录,执行以下命令</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-gdscript3" data-lang="gdscript3"><span style="display:flex;"><span> <span style="color:#719e07">export</span> DUBBO_GO_CONFIG_PATH<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 style="color:#719e07">.</span> |
| </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-fallback" data-lang="fallback"><span style="display:flex;"><span>INFO dubbo/dubbo_protocol.go:84 [DUBBO Protocol] Export service: |
| </span></span></code></pre></div><h3 id="23运行服务调用者">2.3运行服务调用者</h3> |
| <p>进入 go-client 的 cmd 目录,执行以下命令</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-gdscript3" data-lang="gdscript3"><span style="display:flex;"><span> <span style="color:#719e07">export</span> DUBBO_GO_CONFIG_PATH<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 style="color:#719e07">.</span> |
| </span></span></code></pre></div><p>当看到以下日志时即表示 go-client 成功发现 go-server 并发起了 RPC 调用</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>INFO cmd/main.go:75 response: &amp;{A001 Alex Stocks 18 2022-11-19 12:52:38.092 +0800 CST} |
| </span></span></code></pre></div><h2 id="3使用polaris作为注册中心">3.使用Polaris作为注册中心</h2> |
| <p>相关源码:<a href="https://github.com/apache/dubbo-go-samples/tree/master/polaris/registry">示例源码</a></p></description></item><item><title>Overview: 多注册中心</title><link>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/tutorial/develop/registry/multi_registry/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/tutorial/develop/registry/multi_registry/</guid><description> |
| <p>一个 Dubbo-go 应用可以配置的多个接口维度的注册中心。</p> |
| <h2 id="1-准备工作">1. 准备工作</h2> |
| <ul> |
| <li>dubbo-go cli 工具和依赖工具已安装</li> |
| <li>创建一个新的 demo 应用</li> |
| <li>本地启动Nacos、Zookeeper</li> |
| </ul> |
| <h2 id="2-使用多注册中心">2. 使用多注册中心</h2> |
| <p>修改服务端配置 go-server/conf/dubbogo.yaml, 同时将服务注册在两个注册中心上。</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">zookeeper</span>: <span style="color:#586e75"># 指定 zookeeper 注册中心</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">protocol</span>: zookeeper |
| </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">2181</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">nacos</span>: <span style="color:#586e75"># 指定 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">GreeterProvider</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">registry-ids</span>: <span style="color:#586e75"># 同时注册</span> |
| </span></span><span style="display:flex;"><span> - zookeeper |
| </span></span><span style="display:flex;"><span> - nacos |
| </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>修改客户端配置 go-client/conf/dubbogo.yaml</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 style="color:#586e75"># 指定 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">zookeeper</span>: <span style="color:#586e75"># 指定 zookeeper 注册中心</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">protocol</span>: zookeeper |
| </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">2181</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">GreeterClientImpl</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">registry-ids</span>: <span style="color:#586e75"># 从 nacos 注册中心服务发现</span> |
| </span></span><span style="display:flex;"><span> - nacos |
| </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><span style="display:flex;"><span> <span style="color:#268bd2">GreeterClientImpl2</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">registry-ids</span>: <span style="color:#586e75"># 从 zookeeeper 注册中心服务发现</span> |
| </span></span><span style="display:flex;"><span> - zookeeper |
| </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>修改客户端代码,再定义一个客户端存根类,名为GreeterClientImpl2:</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">var</span> grpcGreeterImpl2 = <span style="color:#b58900">new</span>(GreeterClientImpl2) |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">type</span> GreeterClientImpl2 <span style="color:#268bd2">struct</span>{ |
| </span></span><span style="display:flex;"><span> api.GreeterClientImpl |
| </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-go" data-lang="go"><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>(grpcGreeterImpl) |
| </span></span><span style="display:flex;"><span> config.<span style="color:#268bd2">SetConsumerService</span>(grpcGreeterImpl2) |
| </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.HelloRequest{ |
| </span></span><span style="display:flex;"><span> Name: <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> grpcGreeterImpl.<span style="color:#268bd2">SayHello</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;nacos server response result: %v\n&#34;</span>, reply) |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span> reply, err = grpcGreeterImpl2.<span style="color:#268bd2">SayHello</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;zk server response result: %v\n&#34;</span>, reply) |
| </span></span><span style="display:flex;"><span>} |
| </span></span></code></pre></div><h2 id="3-多注册中心服务发现验证">3. 多注册中心服务发现验证</h2> |
| <p>分别启动 go-server/cmd 和 go-client/cmd 查看两条调用成功的日志:</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>INFO cmd/client.go:55 nacos server response result: name:&#34;Hello laurence&#34; id:&#34;12345&#34; age:21 |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span>INFO cmd/client.go:61 zk server response result: name:&#34;Hello laurence&#34; id:&#34;12345&#34; age:21 |
| </span></span></code></pre></div></description></item></channel></rss> |