1. Eureka 的基本概念
1.1 什么是 Eureka?
Eureka 是一个基于 REST 的服务注册和发现平台,主要分为以下两个组件:
- Eureka Server:作为服务注册中心,负责维护服务实例信息。
- Eureka Client:服务消费者与服务提供者都通过 Eureka Client 与 Eureka Server 交互。
Eureka 的核心目标是:
- 服务动态注册与注销:服务启动后自动注册,停止时自动从注册中心移除。
- 服务发现:通过注册中心查找可用服务。
1.2 Eureka 的工作原理
Eureka 的工作机制如下:
- 服务实例在启动时向 Eureka Server 注册。
- 服务消费者从 Eureka Server 获取服务列表以便调用。
- 服务实例定期发送心跳来保持注册状态,Eureka Server 持续监控实例的可用性。
- 服务实例停止时,向 Eureka Server 发送注销请求,或在心跳超时后被移除。
2. 实战:搭建基于 Eureka 的服务注册与发现系统
2.1 环境准备
- JDK 版本:8 或以上
- Spring Boot:2.5.x 或更高版本
- Maven:依赖管理工具
2.2 创建 Eureka Server
2.2.1 新建项目
通过 Spring Initializr 创建一个新的 Spring Boot 项目,选择以下依赖:
- Spring Web
- Eureka Server
2.2.2 配置 pom.xml
确保 pom.xml
包含以下 Eureka Server 依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
2.2.3 配置 application.yml
配置 Eureka Server 的基本信息:
server:
port: 8761
spring:
application:
name: eureka-server
eureka:
client:
register-with-eureka: false
fetch-registry: false
server:
enable-self-preservation: false
2.2.4 启动 Eureka Server
在主类中添加 @EnableEurekaServer
注解,标记为 Eureka Server:
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
启动项目后,访问 http://localhost:8761
,可看到 Eureka Server 的管理页面。
2.3 创建服务提供者(Provider)
2.3.1 新建项目
创建一个新的 Spring Boot 项目,选择以下依赖:
- Spring Web
- Eureka Client
2.3.2 配置 pom.xml
确保 pom.xml
包含 Eureka Client 依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2.3.3 配置 application.yml
配置服务提供者的基本信息:
server:
port: 8081
spring:
application:
name: provider-service
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
2.3.4 实现业务接口
创建一个简单的 RESTful 接口:
@RestController
public class ProviderController {
@GetMapping("/hello")
public String sayHello() {
return "Hello from Provider!";
}
}
启动服务提供者后,Eureka Server 的管理页面中将显示 provider-service
。
2.4 创建服务消费者(Consumer)
2.4.1 新建项目
创建一个新的 Spring Boot 项目,选择以下依赖:
- Spring Web
- Eureka Client
- Spring Cloud LoadBalancer
2.4.2 配置 pom.xml
添加所需依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
2.4.3 配置 application.yml
配置服务消费者的基本信息:
server:
port: 8082
spring:
application:
name: consumer-service
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
2.4.4 调用服务
通过 RestTemplate
调用服务提供者:
@RestController
public class ConsumerController {
@Autowired
private RestTemplate restTemplate;
@GetMapping("/consume")
public String consumeService() {
String url = "http://provider-service/hello";
return restTemplate.getForObject(url, String.class);
}
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
启动服务消费者后,访问 http://localhost:8082/consume
,可调用服务提供者的接口。
3. 总结
通过上述案例,我们完整实现了基于 Eureka 的服务注册与发现功能。Eureka 提供了高效、动态的服务管理方式,在微服务架构中起到了核心作用。虽然 Netflix 宣布停止维护 Eureka,但其简单、直观的设计仍然是学习服务注册与发现的重要工具。此外,了解类似的服务注册工具(如 Consul、Zookeeper)也有助于构建更全面的知识体系。
希望本文的案例能帮助你快速上手 Eureka,并为构建微服务系统打下坚实的基础!