跳到主要内容

什么是服务发现

· 阅读需 2 分钟
素明诚
Full stack development

服务注册和服务查找

服务注册

每个微服务在启动时主动向服务注册中心注册自己的关键信息,如 IP 地址、端口号、服务名称等。这个过程确保服务的可发现性,并在服务状态改变时更新注册信息。

服务查找

当一个服务需要与另一服务交互时,它通过服务注册中心查询所需服务的可用实例和地址信息。这个查询依赖于服务注册数据。

Go 语言实现服务发现

Consul:Consul 是一个提供服务发现、配置和分段功能的工具,它通过一个简单的 HTTP API 为服务注册和服务发现提供支持。Go 可以通过 HashiCorp 提供的 Consul API 客户端库与 Consul 交互

Etcd:Etcd 是一个键值存储仓库,用于配置共享和服务发现。Etcd 的客户端库为 Go 语言提供了接口,可以很方便地集成到 Go 微服务中

Eureka:虽然 Eureka 主要是 Netflix 开发并且与 Java 生态系统结合更紧密,但也有 Go 客户端可以与 Eureka 服务注册和发现机制交互。

Go 语言微服务示例

Go 中使用 Consul 进行服务注册和发现

package main

import (
"github.com/hashicorp/consul/api"
"log"
)

func main() {
// 创建一个 Consul 客户端
client, err := api.NewClient(api.DefaultConfig())
if err != nil {
log.Fatal(err)
}

// 服务注册
registration := new(api.AgentServiceRegistration)
registration.ID = "service1"
registration.Name = "userservice"
registration.Port = 8080
registration.Address = "127.0.0.1"
client.Agent().ServiceRegister(registration)

// 服务发现
services, err := client.Agent().Services()
if err != nil {
log.Fatal(err)
}
for _, service := range services {
log.Println("Service:", service.Service, "Address:", service.Address, "Port:", service.Port)
}
}