【Spring Cloud】 Eureka 服務註冊與發現

目錄

 

前言

原理解析

  一、Eureka的地位

  二、C-S設計架構

三、架構圖

四、三大角色

搭建Eureka環境

一、新建 Eureka Server 的 Module microservicecloud-eureka-7001

二、新建 Eureka Provider Module  microservicecloud-provider-dept-8001

啓動項目驗證

Eureka 中完善服務信息

一、修改註冊服務的名稱

 二、actuator 與註冊微服務信息完善

 三、Eureka 自我保護

小結


前言

   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獲取註冊服務列表,從而能夠消費服務。

 

image.pngimage.png

搭建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 中完善服務信息

一、修改註冊服務的名稱

image.png

image.png

 二、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 自我保護

image.png

 原因:某時刻某一個微服務不可用了,Eureka不會立刻清理,依舊會對該微服務的信息進行保存。

image.png

具體的配置如下,在Eureka服務端,禁用Eureka的自我保護模式。

 

小結

最後簡單對比一下Zookeeper與Eureka:

Zookeeper 保證CP

Eureka 保證AP 

image.png

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章