← 返回首页
🔍

服务发现

📂 architecture ⏱ 1 min 194 words

服务发现

服务发现原理

服务发现解决微服务动态伸缩环境下服务实例地址变化的问题,通过注册中心维护服务实例列表,客户端实时获取可用实例。

┌──────────┐     注册     ┌──────────┐     发现     ┌──────────┐
│ Service A │ ──────────► │ Registry │ ◄────────── │ Service B │
└──────────┘             └──────────┘             └──────────┘
     │                        │                        │
     └───── 健康检查 ◄────────┘

Consul服务发现

Consul提供服务注册、健康检查、KV存储和多数据中心支持。

// Consul服务注册
config := consul.DefaultConfig()
config.Address = "consul.example.com:8500"
client, _ := consul.NewClient(config)

registration := &consul.AgentServiceRegistration{
    ID:   "user-service-1",
    Name: "user-service",
    Port: 8080,
    Check: &consul.AgentServiceCheck{
        HTTP:     "http://localhost:8080/health",
        Interval: "10s",
    },
}
client.Agent().ServiceRegister(registration)

// 服务发现
services, _ := client.Health().Service("user-service", "", true, nil)
for _, s := range services {
    fmt.Printf("Instance: %s:%d\n", s.Service.Address, s.Service.Port)
}

Nacos服务发现

Nacos支持AP和CP两种模式,集成配置中心功能,适合需要动态配置的微服务架构。

// Nacos服务注册
@NacosDiscoveryProperties(serverAddr = "nacos:8848")
public class DiscoveryConfig {
    @Bean
    public NacosDiscovery nacosDiscovery() {
        return new NacosDiscovery();
    }
}

// 服务消费
@LoadBalanced
@Bean
public RestTemplate restTemplate() {
    return new RestTemplate();
}

@GetMapping("/users/{id}")
public User getUser(@PathVariable String id) {
    return restTemplate.getForObject(
        "http://user-service/api/users/" + id, User.class);
}

Eureka服务发现

Eureka采用AP模型,支持自我保护机制,适用于对可用性要求高的场景。

// Eureka服务端
@SpringBootApplication
@EnableEurekaServer
public class EurekaServer {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServer.class, args);
    }
}

// Eureka客户端
@SpringBootApplication
@EnableDiscoveryClient
public class UserService {
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

注册中心对比

特性 Consul Nacos Eureka
一致性 CP AP/CP AP
健康检查 HTTP/TCP/gRPC HTTP/TCP 心跳
多数据中心 支持 支持 不支持
配置管理 KV存储 内置