微服务Eureka组件的介绍、安装、使用
微服务 Eureka 组件的介绍、安装与使用详解
在微服务架构中,服务注册与发现是至关重要的一环,而 Eureka 作为 Netflix 开源的服务注册中心,广泛应用于 Spring Cloud 微服务体系中。本文将带你全面了解 Eureka 的概念、安装及在 Spring Boot 中的使用方法。
1️⃣ Eureka 概念介绍
Eureka 是一个基于 REST 的服务注册与发现组件,主要用于微服务系统中:
- 服务注册:微服务启动时向 Eureka Server 注册自己的信息(IP、端口、服务名等)。
- 服务发现:微服务调用方从 Eureka Server 获取其他服务的实例信息,实现动态调用。
- 健康检查:Eureka 会定期检测注册服务的状态,剔除不可用实例。
Eureka 角色:
- Eureka Server:服务注册中心
- Eureka Client:微服务客户端,既向 Server 注册,又能发现其他服务
2️⃣ Eureka 的特点
- 基于 REST 的轻量级注册中心
- 高可用:支持集群部署,自动复制注册信息
- 自我保护机制:当网络异常导致大量服务下线时,防止误剔除
- 与 Spring Cloud 完美集成:配置简单,开箱即用
3️⃣ Eureka Server 的安装与配置
假设我们使用 Spring Boot + Spring Cloud Netflix Eureka。
3.1 新建 Spring Boot 项目
- 添加依赖(Maven):
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>eureka-server-demo</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.4</version><relativePath/></parent><properties><java.version>17</java.version><spring-cloud.version>2022.0.4</spring-cloud.version></properties><dependencies><!-- Eureka Server --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency><!-- Spring Boot Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>
3.2 启动类添加注解
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {public static void main(String[] args) {SpringApplication.run(EurekaServerApplication.class, args);}
}
3.3 配置 application.yml
server:port: 8761eureka:client:register-with-eureka: false # Server 不注册自己fetch-registry: false # Server 不需要获取注册表
spring:application:name: eureka-server-demo
启动后访问:
http://localhost:8761
你会看到 Eureka Server 的管理界面。
4️⃣ Eureka Client 的安装与使用
4.1 添加依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
4.2 配置 application.yml
spring:application:name: javaquestion-service # 服务名
server:port: 8081
eureka:client:service-url:defaultZone: http://localhost:8761/eureka/
4.3 启动类添加注解
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@SpringBootApplication
@EnableDiscoveryClient
public class JavaQuestionServiceApplication {public static void main(String[] args) {SpringApplication.run(JavaQuestionServiceApplication.class, args);}
}
启动后,你可以在 Eureka Server 界面看到注册成功的服务。
5️⃣ 服务调用示例(Feign + Eureka)
5.1 添加依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
5.2 创建 Feign 接口
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;@FeignClient(name = "javaquestion-service")
public interface JavaQuestionClient {@GetMapping("/javaquestion/list")String getQuestions();
}
5.3 使用 Feign 调用
@RestController
@RequestMapping("/api")
public class TestController {@Resourceprivate JavaQuestionClient javaQuestionClient;@GetMapping("/questions")public String getQuestions() {return javaQuestionClient.getQuestions();}
}
调用时无需关心服务实例的 IP 和端口,Eureka 会自动发现可用实例。
6️⃣ Eureka 集群部署
- 多个 Eureka Server 互相注册,形成高可用集群
- 配置示例(
application.yml
):
eureka:client:service-url:defaultZone: http://eureka1:8761/eureka/,http://eureka2:8761/eureka/
这样一个 Eureka Server 宕机,其他仍可提供服务注册和发现。
7️⃣ 总结
Eureka 作为微服务注册与发现组件,具有轻量、高可用、易集成的特点。
在 Spring Cloud 微服务中,它实现了:
- 服务动态注册
- 服务发现
- 客户端负载均衡
- 与 Feign 等组件无缝集成
通过 Eureka,你的微服务系统可以动态扩缩容,同时保证服务调用稳定可靠。