Micro In Action(六):服务发现

Che Dan
10 min readFeb 20, 2020
Micro In Action

本文是Micro系列文章的第六篇。我们将从最基本的话题开始,逐步转到高级特性。

今天来谈谈Micro中的服务发现。

本系列的第一篇文章曾提到,Micro以插件的形式支持多种服务发现系统。默认情况下,服务发现基于组播DNS(mDNS)机制, 无需任何配置,非常便于在开发环境中使用。

但是在生产环境中, 我们需要可靠性更高的产品。高可靠的注册中心有很多, 例如 etcd/consul /zookeeper/eureka 等等。 针对这些产品, Micro都提供了相应的插件,它甚至提供了Kubernetes插件, 以便把Kubernetes用作注册中心。

在所有这些产品中, etcd是目前最主流的。它也是Micro官方推荐并内置支持的方案。 因此若想在Micro 中使用etcd,与mDNS一样,无需任何插件即可使用。

连接etcd

下面我们将尝试在示例项目中使用etcd。

etcd本身的安装与配置不是本文的重点(可以etcd官网找到更多相关信息),我们假设你已经拥有一个三节点的etcd集群, 地址分别是

  • etcd1.foo.com:2379
  • etcd2.foo.com:2379
  • etcd3.foo.com:2379

由于Micro内置支持etcd,我们无需对hello-service项目的源码作任何修改,只需在项目启动时指定两个参数:

  1. registry,指定注册中心类型,这里我们指定为etcd。环境变量$MICRO_REGISTRY 作用与此参数相同。
  2. registry_address,指定注册中心地址,多个地址用逗号分隔。环境变量$MICRO_REGISTRY_ADDRESS 作用与此参数相同。

指定参数并运行程序的结果如下:

$ go run main.go plugin.go --registry=etcd --registry_address=etcd1.foo.com:2379,etcd2.foo.com:2379,etcd3.foo.com:2379
2020-04-03 17:52:04 level=info Starting [service] com.foo.service.hello
2020-04-03 17:52:04 level=info Server [grpc] Listening on [::]:55300
2020-04-03 17:52:04 level=info Broker [eats] Connected to [::]:55303…

--

--