目錄
一、新建 Eureka Server 的 Module microservicecloud-eureka-7001
二、新建 Eureka Provider Module microservicecloud-provider-dept-8001
前言
Eureka是Spring Cloud 全家桶中的一個技術組件。是Netflix的一個子模塊,也是核心模塊之一。
它是一個基於REST的服務,用於定位服務,以實現雲端中間層服務發現和故障轉移。服務註冊和發現,只需要使用服務的標識符,就可以訪問服務,而不需要修改服務調用的配置文件了。功能類似於dubbo的註冊中心,比如Zookeeper。
原理解析
一、Eureka的地位
Spring Cloud封裝了Netflix公司開發的Eureka模塊來實現服務註冊和發現。
二、C-S設計架構
1.Eureka Server: Eureka採用了C-S的設計架構,Eureka作爲服務註冊功能的服務器,是服務註冊中心。
2.系統中的其他微服務 :使用Eureka的客戶端Eureka Client連接到Eureka Server並維持心跳連接。這樣系統的維護人員可以通過Eureka Server監控系統中各個微服務是否正常運行。Spring Cloud的一些其他模塊(zuul)可以通過Eureka Server發現系統中其他微服務,並執行相關的邏輯。
三、架構圖
左邊圖是Eureka的架構圖,對比右邊zookeeper的架構圖。
Eureka包含兩個組件:Eureka Server和Eureka Client
1.Eureka Server 提供服務註冊服務
各個節點啓動後,會在Eureka Server中進行註冊,Eureka Server中的服務註冊表會存儲所有可用服務節點的信息,服務節點的信息可以在界面中直觀的看到。
2.Eureka Client
是一個java客戶端,用於簡化Eureka Server的交互,客戶端同時也具備一個內置的、使用輪詢(round-robin)負載算法的負載均衡器。在應用啓動後,將會向Eureka Server發送心跳(默認週期30秒)。如果Eureka Server在多個心跳週期內沒有接收到某個節點的心跳,Eureka Server將會從服務註冊表把這個服務節點移除(默認90秒)
四、三大角色
- Eureka Server 提供服務註冊與發現
- Eureka Provider (Eureka Client) 服務提供方將自身服務註冊到Eureka,從而使服務消費方能夠找到
- Eureka Consumer(Eureka Client) 服務消費方從Eureka獲取註冊服務列表,從而能夠消費服務。
搭建Eureka環境
需要建立一個maven項目,在idea或eclipse環境下都可以,建立一個項目microservicecloud,之後進行下面的操作,在pom.xml文件中,引入相應的依賴
<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.atguigu.springcloud</groupId>
<artifactId>microservicecloud</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<junit.version>4.12</junit.version>
<log4j.version>1.2.17</log4j.version>
<lombok.version>1.16.18</lombok.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.5.9.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.0.4</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.31</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
一、新建 Eureka Server 的 Module microservicecloud-eureka-7001
1.引入依賴
<dependencies>
<!--eureka-server服務端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
<!-- 修改後立即生效,熱部署 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
</dependencies>
2.配置啓動項
建立一個包,在包下面創建Java類 EurekaServer7001_App,並添加相應的註解@EnableEurekaServer @SpringBootApplication
@SpringBootApplication
@EnableEurekaServer // EurekaServer服務器端啓動類,接受其它微服務註冊進來
public class EurekaServer7001_App
{
public static void main(String[] args)
{
SpringApplication.run(EurekaServer7001_App.class, args);
}
}
3.配置application.yml文件
server:
port: 7001
eureka:
instance:
hostname: eureka7001 #eureka服務端的實例名稱
client:
register-with-eureka: false #false表示不向註冊中心註冊自己。
fetch-registry: false #false表示自己端就是註冊中心,我的職責就是維護服務實例,並不需要去檢索服務
service-url:
defaultZone: http://localhost:${server.port}
# 設置與Eureka Server交互的地址查詢服務和註冊服務都需要依賴這個地址(單機)。
server:
# enable-self-preservation: false # 關閉自我保護模式
eviction-interval-timer-in-ms: 3000
二、新建 Eureka Provider Module microservicecloud-provider-dept-8001
1.引入依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
2.啓動類 添加註解
@SpringBootApplication
@EnableEurekaClient //本服務啓動後會自動註冊進eureka服務中
public class DeptProvider8001_App
{
public static void main(String[] args)
{
SpringApplication.run(DeptProvider8001_App.class, args);
}
}
3.配置文件application.yml
eureka:
client: #客戶端註冊進eureka服務列表內
service-url:
defaultZone: http://localhost:7001/eureka
instance:
instance-id: microservicecloud-dept8001
prefer-ip-address: true #訪問路徑可以顯示IP地址
lease-renewal-interval-in-seconds: 30000
lease-expiration-duration-in-seconds: 90000
啓動項目驗證
Eureka Consumer module創建類似 Eureka Provider。先測試服務註冊和發現功能:
1.啓動 Eureka Server端 microservicecloud-eureka-7001,如下所示
2.啓動 Eureka Client端 microservicecloud-provider-dept-8001,如下所示
Eureka 中完善服務信息
一、修改註冊服務的名稱
二、actuator 與註冊微服務信息完善
1.微服務info內容詳細信息修改
(1)本服務pom文件添加依賴:
<!-- actuator監控信息完善 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
(2) 父工程pom文件添加
<build>
<finalName>microservicecloud</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<delimiters>
<delimit>$</delimit>
</delimiters>
</configuration>
</plugin>
</plugins>
</build>
(3)本服務的application.yml文件修改
info:
app.name: atguigu-microservicecloud
company.name: www.atguigu.com
build.artifactId: $project.artifactId$
build.version: $project.version$
(4)效果圖
三、Eureka 自我保護
原因:某時刻某一個微服務不可用了,Eureka不會立刻清理,依舊會對該微服務的信息進行保存。
具體的配置如下,在Eureka服務端,禁用Eureka的自我保護模式。
小結
最後簡單對比一下Zookeeper與Eureka:
Zookeeper 保證CP
Eureka 保證AP