javascript
Spring Cloud(一)Eureka Server-单体及集群搭建
一.Enreka介紹
Eureka是Netflix開發的服務發現框架,本身是一個基于REST的服務,主要用于定位運行在AWS域中的中間層服務,以達到負載均衡和中間層服務故障轉移的目的。SpringCloud將它集成在其子項目spring-cloud-netflix中,以實現SpringCloud的服務發現功能。
Eureka包含兩個組件:Eureka Server和Eureka Client。
Eureka Server提供服務注冊服務,各個節點啟動后,會在Eureka Server中進行注冊,這樣EurekaServer中的服務注冊表中將會存儲所有可用服務節點的信息,服務節點的信息可以在界面中直觀的看到。
Eureka Client是一個java客戶端,用于簡化與Eureka Server的交互,客戶端同時也就是一個內置的、使用輪詢(round-robin)負載算法的負載均衡器。
在應用啟動后,將會向Eureka Server發送心跳,默認周期為30秒,如果Eureka Server在多個心跳周期內沒有接收到某個節點的心跳,Eureka Server將會從服務注冊表中把這個服務節點移除(默認90秒)。
Eureka Server之間通過復制的方式完成數據的同步,Eureka還提供了客戶端緩存機制,即使所有的Eureka Server都掛掉,客戶端依然可以利用緩存中的信息消費其他服務的API。綜上,Eureka通過心跳檢查、客戶端緩存等機制,確保了系統的高可用性、靈活性和可伸縮性。
上圖簡要描述了Eureka的基本架構,由3個角色組成:
1、Eureka Server
-
提供服務注冊和發現
2、Service Provider
-
服務提供方
-
將自身服務注冊到Eureka,從而使服務消費方能夠找到
3、Service Consumer
-
服務消費方
-
從Eureka獲取注冊服務列表,從而能夠消費服務
二.單體搭建
1.pom中添加依賴
SpringCloud與SpringBoot版本對應關系如下:
添加依賴:
? ?<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.3.RELEASE</version><relativePath/></parent> ? ?<properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><spring-cloud.version>Greenwich.RELEASE</spring-cloud.version></properties> ?<dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></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>2.Application啟動類中添加注解
@EnableEurekaServer:該注解是為了激活Eureka Servier相關的自動配置類org.springframework.cloud.netflix.eureka.server.EurekaServerAutoConfiguration
@SpringBootApplication @EnableEurekaServer public class Study01Application { ?public static void main(String[] args) {SpringApplication.run(Study01Application.class, args);} }3.配置文件
spring.application.name=spring-cloud-eureka ? server.port=8000 eureka.client.register-with-eureka=false eureka.client.fetch-registry=false ? eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/-
eureka.client.register-with-eureka :表示是否將自己注冊到Eureka Server,默認為true。
-
eureka.client.fetch-registry :表示是否從Eureka Server獲取注冊信息,默認為true。
-
eureka.client.serviceUrl.defaultZone :設置與Eureka Server交互的地址,查詢服務和注冊服務都需要依賴這個地址。默認是http://localhost:8761/eureka ;多個地址可使用 , 分隔。
啟動工程后,訪問:http://localhost:8000/,可以看到下面的頁面
三.集群搭建
注冊中心這么關鍵的服務,如果是單點的話,遇到故障就是毀滅性的。在一個分布式系統中,服務注冊中心是最重要的基礎部分,理應隨時處于可以提供服務的狀態。為了維持其可用性,使用集群是很好的解決方案。Eureka通過互相注冊的方式來實現高可用的部署,所以我們只需要將Eureke Server配置其他可用的serviceUrl就能實現高可用部署。
1.雙節點注冊
(1)創建application-peer1.properties,作為peer1服務中心的配置,并將serviceUrl指向peer2
spring.application.name=spring-cloud-eureka server.port=8000 eureka.instance.hostname=peer1 ? eureka.client.serviceUrl.defaultZone=http://peer2:8001/eureka/(2)創建application-peer2.properties,作為peer2服務中心的配置,并將serviceUrl指向peer1
spring.application.name=spring-cloud-eureka server.port=8001 eureka.instance.hostname=peer2 ? eureka.client.serviceUrl.defaultZone=http://peer2:8000/eureka/(3)啟動服務加載不同配置文件
依次啟動完成后,瀏覽器輸入:http://localhost:8000/ 效果圖如下:
根據圖可以看出peer1的注冊中心DS Replicas已經有了peer2的相關配置信息,并且出現在available-replicas中。我們手動停止peer2來觀察,發現peer2就會移動到unavailable-replicas一欄中,表示peer2不可用。
2.多節點注冊
在生產中我們可能需要三臺或者大于三臺的注冊中心來保證服務的穩定性,配置的原理其實都一樣,將注冊中心分別指向其它的注冊中心。這里只介紹三臺集群的配置情況,其實和雙節點的注冊中心類似,每臺注冊中心分別又指向其它兩個節點即可,使用application.yml來配置。
--- spring:application:name: spring-cloud-eurekaprofiles: peer1 server:port: 8000 eureka:instance:hostname: peer1client:serviceUrl:defaultZone: http://peer2:8001/eureka/,http://peer3:8002/eureka/ --- spring:application:name: spring-cloud-eurekaprofiles: peer2 server:port: 8001 eureka:instance:hostname: peer2client:serviceUrl:defaultZone: http://peer1:8000/eureka/,http://peer3:8002/eureka/ --- spring:application:name: spring-cloud-eurekaprofiles: peer3 server:port: 8002 eureka:instance:hostname: peer3client:serviceUrl:defaultZone: http://peer1:8000/eureka/,http://peer2:8001/eureka/分別以peer1、peer2、peer3的配置參數啟動eureka注冊中心。
依次啟動完成后,瀏覽器輸入:http://localhost:8000/ 效果圖如下:
可以在peer1中看到了peer2、peer3的相關信息。至此eureka集群也已經完成了。
總結
以上是生活随笔為你收集整理的Spring Cloud(一)Eureka Server-单体及集群搭建的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring Boot实现一个天气预报系
- 下一篇: Spring Cloud(二) 配置Eu