侧边栏壁纸
博主头像
colo

欲买桂花同载酒

  • 累计撰写 1823 篇文章
  • 累计收到 0 条评论

如何使用Spring Cloud Eureka实现服务注册与发现?

2025-12-9 / 0 评论 / 4 阅读

题目

如何使用Spring Cloud Eureka实现服务注册与发现?

信息

  • 类型:问答
  • 难度:⭐

考点

Eureka服务注册,Eureka服务发现,Spring Cloud基础组件

快速回答

实现服务注册与发现的核心步骤:

  1. 创建Eureka Server作为注册中心
  2. 服务提供者通过@EnableEurekaClient注册到Eureka
  3. 服务消费者通过DiscoveryClient发现服务
  4. 使用RestTemplate或Feign调用服务
## 解析

1. 原理说明

Spring Cloud Eureka采用CS架构:

  • Eureka Server:注册中心,维护所有微服务的注册信息
  • Eureka Client:微服务应用,启动时向Server注册,定期发送心跳
  • 服务发现:消费者从Server获取提供者地址列表,通过负载均衡调用

2. 代码实现步骤

2.1 创建Eureka Server

// 主类添加注解
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

application.yml配置

server:
  port: 8761
eureka:
  client:
    register-with-eureka: false  # 自身不注册
    fetch-registry: false        # 不获取注册表

2.2 服务提供者注册

// 主类添加注解
@SpringBootApplication
@EnableEurekaClient
public class ProductServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProductServiceApplication.class, args);
    }
}

application.yml配置

spring:
  application:
    name: product-service  # 服务名称
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

2.3 服务消费者发现与调用

@RestController
public class OrderController {
    @Autowired
    private DiscoveryClient discoveryClient;

    @GetMapping("/order/{id}")
    public String getProduct(@PathVariable Long id) {
        // 1. 获取服务实例
        List<ServiceInstance> instances = discoveryClient.getInstances("product-service");
        ServiceInstance instance = instances.get(0);  // 简单获取第一个实例

        // 2. 构造请求URL
        String url = "http://" + instance.getHost() + ":" + instance.getPort() + "/products/" + id;

        // 3. 使用RestTemplate调用
        return new RestTemplate().getForObject(url, String.class);
    }
}

3. 最佳实践

  • 服务命名:使用spring.application.name定义唯一服务ID
  • 负载均衡:实际生产应结合Ribbon实现客户端负载均衡(添加@LoadBalanced注解)
  • 高可用:部署多个Eureka Server节点相互注册

4. 常见错误

  • 服务无法注册:检查Eureka Server地址是否正确,网络是否连通
  • UnknownHostException:确保服务名称拼写一致(区分大小写)
  • 调用失败:服务提供者未启动或健康检查未通过

5. 扩展知识

  • 服务续约:默认每30秒发送心跳,90秒未收到则剔除服务
  • 自我保护模式:当85%以上服务心跳丢失时,Eureka保护注册信息不删除
  • 替代方案:Consul、Nacos等也可作为注册中心