Spring Cloud Eureka 入門之服務注冊中心詳解 ...
本文提綱
1. Eureka 服務治理
1.1 什么是 Eureka
1.2 Eureka 集群架構(gòu)
2. 運行 Eureka 工程 springcloud-eureka-server
3. 詳解 Eureka 工程 springcloud-eureka-server
一、Eureka 服務治理
1.1 什么是 Eureka
Eureka,這里是 Spring Cloud Eureka 的簡稱,是 Spring Cloud Netflix 組件之一。Spring Cloud Netflix 中核心的組件包括了服務治理(Eureka),服務容斷(Hystrix),路由(Zuul)和客戶端負載均衡(Ribbon)。在系列第三篇,服務消費者講解會涉及到 Ribbon 的使用。
回到 Spring Cloud Eureka,是基于 Netflix Eureka (Netflix 是 Java 實現(xiàn)的開源軟件)。服務治理(Eureka)包括服務注冊、服務發(fā)現(xiàn)和服務檢測監(jiān)控等,自然本文介紹下 Eureka 作為服務注冊中心。
1.2 Eureka 架構(gòu)
Eureka 作為服務治理,必然滿足下面幾點:
- 服務本身不存在單點故障,
- 支持集群,即高可用性
- 服務與服務之間通過服務注冊中心找到彼此實例
作為服務端(即服務注冊中心),包括
- 管理服務實例
- 提供服務注冊或下線
- 提供服務發(fā)現(xiàn)
- 提供服務注冊表至兩類客戶端(即服務提供者和消費者)
作為客戶端(即服務提供者和消費者),包括
- 連接服務注冊中心
- 向服務注冊中心注冊或者下線服務實例
- 向服務注冊中心或服務注冊緩存列表查詢服務
Eureka 集群架構(gòu)如圖所示:
二、運行工程
運行 Eureka 工程 springcloud-eureka-server
運行環(huán)境:JDK 7 或 8,Maven 3.0+
技術(shù)棧:Spring Cloud Dalston.SR1、 spring-cloud-netflix 1.3.1、Spring Boot 1.5.4
1. git clone 下載工程 springcloud-learning-example
項目地址見 GitHub - https://github.com/JeffLi1993/springcloud-learning-example:
git clone https://github.com/JeffLi1993/springcloud-learning-example.git
2. Maven 編譯安裝這個工程:
- cd springcloud-learning-example
- mvn clean install
3. 運行 springcloud-eureka-server Eureka 工程
右鍵 Main 函數(shù) Run Eureka Server 啟動類 EurekaServerApplication,啟動服務注冊中心工程。
EurekaServerApplication 類地址:/springcloud-learning-example/springcloud-eureka-sample/springcloud-eureka-server/src/main/java/org/spring/springboot/EurekaServerApplication.java
控制臺 Console 看到這類信息,代表啟動成功:
- 2017-06-30 10:32:47.549 INFO 2977 --- [ Thread-11] e.s.EurekaServerInitializerConfiguration : Started Eureka Server2017-06-30 10:32:47.625 INFO 2977 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8888 (http)
- 2017-06-30 10:32:47.626 INFO 2977 --- [ main] .s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 8888
- 2017-06-30 10:32:47.632 INFO 2977 --- [ main] o.s.springboot.EurekaServerApplication : Started EurekaServerApplication in 23.168 seconds
4. 訪問 Eureka 注冊中心可視化界面
打開瀏覽器,訪問 http://localhost:8888/ ,如圖所示
可以看到主體信息包括:
- 系統(tǒng)狀態(tài):環(huán)境、運行時間、更新時間等
- 注冊信息:服務名、服務地址、服務狀態(tài)
- 基本信息:環(huán)境、內(nèi)存、副本信息
- 實例信息:IP、端口
三、工程代碼詳解
詳解 Eureka 工程 springcloud-eureka-server
1.springcloud-eureka-server 工程目錄結(jié)構(gòu)
- ├── pom.xml└── src
- └── main
- ├── java
- │ └── org
- │ └── spring
- │ └── springcloud
- │ ├── EurekaServerApplication.java
- └── resources
- └── application.yml
EurekaServerApplication.java Eureka Server 啟動類
application.yml 配置文件
2. pom.xml 配置
- <?xml version="1.0" encoding="UTF-8"?><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.0 http://maven.apache.org/xsd/ma ... gt%3B
- <modelVersion>4.0.0</modelVersion>
- <groupId>springcloud</groupId>
- <artifactId>springcloud-eureka-server</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <name>springcloud-eureka-server :: Spring Cloud Eureka 服務注冊中心</name>
- <!-- Spring Boot 啟動父依賴 --><parent><groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>1.5.4.RELEASE</version>
- </parent>
- <dependencies>
- <!-- Spring Cloud Netflix Eureka Server 依賴 -->
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-eureka-server</artifactId>
- </dependency>
- <!-- Spring Boot Test 依賴 -->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope>
- </dependency>
- </dependencies>
- <dependencyManagement>
- <dependencies>
- <!-- Spring Cloud Netflix 依賴 -->
- <dependency>
- <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-netflix</artifactId>
- <version>1.3.1.RELEASE</version> <type>pom</type>
- <scope>import</scope>
- </dependency>
- </dependencies>
- </dependencyManagement>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId>
- <configuration>
- <source>1.8</source>
- <target>1.8</target>
- </configuration>
- </plugin>
- </plugins>
- </build>
- </project>
使用的依賴是
- spring-cloud-netflix 1.3.1 是 Spring Cloud Dalston.SR1 版本。
- spring-cloud-starter-eureka-server Eureka Server 模塊依賴
上面提到的客戶端負載均衡 Ribbon ,可以依賴樹中看出 spring-cloud-starter-eureka-server 依賴了 Ribbon 相關(guān)的庫。因為一般 eureka 本身作為服務自注冊實現(xiàn)高可用,也可以作為客戶端調(diào)用其他服務。
3. application.yml 配置
- server:
- port: 8888 # 服務端口eureka:
- instance:
- hostname: localhost # 設置主機名
- client:
- registerWithEureka: false # 是否向 Eureka 注冊服務。該應用為服務注冊中心,不需要自注冊,設置為 false
- fetchRegistry: false # 是否檢索服務。該應用為服務注冊中心,職責為注冊和發(fā)現(xiàn)服務,無需檢索服務,設置為 false
- server:
- waitTimeInMsWhenSyncEmpty: 0 # 設置同步為空時的等待時間。默認 5 * MINUTES
application.property,可以看下面的配置解釋:
- server.port 設置工程服務端口
- eureka.instance.hostname Eureka 實例主機名
- eureka.client.registerWithEureka 是否向 Eureka 注冊服務。服務注冊中心服務,沒有作為集群,所以不需要自注冊,設置為 false
- eureka.client.fetchRegistry 是否檢索服務。該應用為服務注冊中心,職責為注冊和發(fā)現(xiàn)服務,無需檢索服務,設置為 false
- eureka.server.waitTimeInMsWhenSyncEmpty 設置同步為空時的等待時間。默認 5 * MINUTES
4.注冊中心應用啟動類
- /**
- * Spring Boot Eureka Server 應用啟動類
- *
- * Created by bysocket on 21/06/17.
- */
- @EnableEurekaServer // Eureka Server 標識
- @SpringBootApplication // Spring Boot 應用標識
- public class EurekaServerApplication {
- public static void main(String args) { // 程序啟動入口
- // 啟動嵌入式的 Tomcat 并初始化 Spring 環(huán)境及其各 Spring 組件
- SpringApplication.run(EurekaServerApplication.class,args);
- }
- }
@EnableEurekaServer 標志該應用作為 Eureka Server ,并會自動化讀取相關(guān)配置。
四、小結(jié)
此小章節(jié)介紹了如何 Eureka 作為服務注冊中心 Server,下一小結(jié)講下 服務提供者詳解 具體是如何向服務注冊中心注冊自己的。
【本文為51CTO專欄作者“李強強”的原創(chuàng)稿件,轉(zhuǎn)載請通過51CTO聯(lián)系作者獲取授權(quán)】