微服務 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,你的微服務系統可以動態擴縮容,同時保證服務調用穩定可靠。