Eureka
官方介紹:
Eureka is a REST (Representational State Transfer) based service that is primarily used in the AWS cloud for locating services for the purpose of load balancing and failover of middle-tier servers.
Eureka 是一個(gè)基于 REST 的服務(wù)闯参,主要在 AWS 云中使用, 定位服務(wù)來(lái)進(jìn)行中間層服務(wù)器的負(fù)載均衡和故障轉(zhuǎn)移喝峦。
Spring Cloud 封裝了 Netflix 公司開發(fā)的 Eureka 模塊來(lái)實(shí)現(xiàn)服務(wù)注冊(cè)和發(fā)現(xiàn)。Eureka 采用了 C-S 的設(shè)計(jì)架構(gòu)乃沙。Eureka Server 作為服務(wù)注冊(cè)功能的服務(wù)器诽表,它是服務(wù)注冊(cè)中心唉锌。而系統(tǒng)中的其他微服務(wù),使用 Eureka 的客戶端連接到 Eureka Server竿奏,并維持心跳連接袄简。這樣系統(tǒng)的維護(hù)人員就可以通過(guò) Eureka Server 來(lái)監(jiān)控系統(tǒng)中各個(gè)微服務(wù)是否正常運(yùn)行。Spring Cloud 的一些其他模塊(比如Zuul)就可以通過(guò) Eureka Server 來(lái)發(fā)現(xiàn)系統(tǒng)中的其他微服務(wù)泛啸,并執(zhí)行相關(guān)的邏輯绿语。
Eureka由兩個(gè)組件組成:Eureka服務(wù)器和Eureka客戶端。Eureka服務(wù)器用作服務(wù)注冊(cè)服務(wù)器候址。Eureka客戶端是一個(gè)java客戶端吕粹,用來(lái)簡(jiǎn)化與服務(wù)器的交互、作為輪詢負(fù)載均衡器岗仑,并提供服務(wù)的故障切換支持昂芜。Netflix在其生產(chǎn)環(huán)境中使用的是另外的客戶端,它提供基于流量赔蒲、資源利用率以及出錯(cuò)狀態(tài)的加權(quán)負(fù)載均衡泌神。
用一張圖來(lái)認(rèn)識(shí)以下:上圖簡(jiǎn)要描述了Eureka的基本架構(gòu),由3個(gè)角色組成:
1舞虱、Eureka Server
- 提供服務(wù)注冊(cè)和發(fā)現(xiàn)
2欢际、Service Provider
- 服務(wù)提供方
- 將自身服務(wù)注冊(cè)到Eureka,從而使服務(wù)消費(fèi)方能夠找到
3矾兜、Service Consumer
- 服務(wù)消費(fèi)方
- 從Eureka獲取注冊(cè)服務(wù)列表损趋,從而能夠消費(fèi)服務(wù)
一、單機(jī)案例分析:
spring boot - 初始化項(xiàng)目鏈接:
http://start.spring.io/
1椅寺、pom中添加依賴
<?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/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.neo</groupId>
<artifactId>spring-cloud-eureka</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>spring-cloud-eureka</name>
<description>Demo project for Spring cloud eureka</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.7</java.version>
<spring-cloud.version>Dalston.RELEASE</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-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>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
這邊有個(gè)一問(wèn)題浑槽,要是約束報(bào)錯(cuò)蒋失,
解決方法:maven-->update project --> force update of snapshots/releases 勾選,然后ok
2桐玻、添加啟動(dòng)代碼中添加@EnableEurekaServer注解
@SpringBootApplication
@EnableEurekaServer//添加這個(gè)注解
public class SpringCloudEurekaApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudEurekaApplication.class, args);
}
}
3篙挽、配置文件
在默認(rèn)設(shè)置下,該服務(wù)注冊(cè)中心也會(huì)將自己作為客戶端來(lái)嘗試注冊(cè)它自己镊靴,所以我們需要禁用它的客戶端注冊(cè)行為铣卡,在application.properties添加以下配置:
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:8000/eureka/
eureka.client.register-with-eureka :表示是否將自己注冊(cè)到Eureka Server,默認(rèn)為true偏竟。
eureka.client.fetch-registry :表示是否從Eureka Server獲取注冊(cè)信息煮落,默認(rèn)為true。
eureka.client.serviceUrl.defaultZone :設(shè)置與Eureka Server交互的地址踊谋,查詢服務(wù)和注冊(cè)服務(wù)都需要依賴這個(gè)地址蝉仇。
默認(rèn)是http://localhost:8761/eureka ;多個(gè)地址可使用 , 分隔殖蚕。
4量淌、測(cè)試
啟動(dòng)工程后,訪問(wèn):http://localhost:8000/嫌褪,可以看到下面的頁(yè)面,其中還沒(méi)有發(fā)現(xiàn)任何服務(wù)
二胚股、集群案例分析:
雙節(jié)點(diǎn)注冊(cè)中心
將項(xiàng)目復(fù)制兩份笼痛,application.properties 刪除
1、創(chuàng)建application-peer1.properties琅拌,作為peer1服務(wù)中心的配置缨伊,并將serviceUrl指向peer2
spring.application.name=spring-cloud-eureka
server.port=8000
eureka.instance.hostname=peer1
eureka.client.serviceUrl.defaultZone=http://peer2:8001/eureka/
這邊記住:
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
這兩個(gè)不需要进宝,這才能自己注冊(cè)到Eureka Server刻坊,獲取server的信息
2、創(chuàng)建application-peer2.properties党晋,作為peer2服務(wù)中心的配置谭胚,并將serviceUrl指向peer1
spring.application.name=spring-cloud-eureka
server.port=8001
eureka.instance.hostname=peer2
eureka.client.serviceUrl.defaultZone=http://peer1:8000/eureka/
3、host轉(zhuǎn)換
在hosts文件中加入如下配置
127.0.0.1 peer1
127.0.0.1 peer2
這邊需要注意hosts需要管理員權(quán)限才能修改未玻,可以管理員身份打開記事本及EditPlus灾而,然后軟件內(nèi)打開hosts文件,修改保存扳剿,
配置成功檢驗(yàn):
localhost:8000--->peer1:8000 效果是一樣的
4旁趟、打包啟動(dòng)
依次執(zhí)行下面命令
#打包 eclipse mvn 打包自帶mvn 這邊 clean 前不需要加
clean package
# 分別以peer1和peeer2 配置信息啟動(dòng)eureka
java -jar spring-cloud-eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer1
java -jar spring-cloud-eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer2
這邊有個(gè)問(wèn)題,打包的時(shí)候會(huì)報(bào)錯(cuò):TransportException: Cannot execute request on any known server
原因:沒(méi)有加
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
不過(guò)不用管庇绽,最后還是success
之后Java -jar 分別運(yùn)行即可
5锡搜、測(cè)試
http://localhost:8000/
根據(jù)圖可以看出peer1的注冊(cè)中心DS Replicas已經(jīng)有了peer2的相關(guān)配置信息橙困,并且出現(xiàn)在available-replicas中。我們手動(dòng)停止peer2來(lái)觀察耕餐,發(fā)現(xiàn)peer2就會(huì)移動(dòng)到unavailable-replicas一欄中凡傅,表示peer2不可用。
到此雙節(jié)點(diǎn)的配置已經(jīng)完成蛾方。
至此像捶,蟹蟹!
更多精彩內(nèi)容桩砰,請(qǐng)看大神的:
傳送門 http://www.ityouknow.com/spring-cloud