天天看點

SpringCloud(三):服務發現元件EurekaWhy EurekaWhat EurekaHow EnrekaDemo總結一下:

Why Eureka

Eureka來自生産環境,Spring Cloud對Eureka支援非常好。

What Eureka

Eureka是Netflix開發的服務發現架構,本事是一個基于REST的服務,主要用于定位運作在AWS域中的中間層服務,以達到負載均衡和中間層服務故障轉移的目的。Spring Cloud将它內建在其子項目spring-cloud-netflix中,以實作Spring Cloud的服務發現功能。

Eureka項目相當活躍,代碼更新相當頻繁,面前最新的版本是1.5.5.Eureka 2.0的版本也正在緊鑼密鼓地開發中,2.0将會帶來更好的擴充性,并且使用細粒度的訂閱模型,但是還沒有Release.

更多詳情了解官方資料:https://github.com/Netflix/eureka/wiki/Eureka-2.0-Motivations

How Enreka

官方架構圖:https://github.com/Netflix/eureka/wiki/Eureka-at-a-glance

SpringCloud(三):服務發現元件EurekaWhy EurekaWhat EurekaHow EnrekaDemo總結一下:

以上大緻描述了Eureka叢集的工作過程。簡單介紹一下:

Application Servce就相當于之前介紹到的服務提供者(使用者微服務),Application Client就相當于服務消費者(電影微服務);

Make Remote Call,可以簡單了解為調用RESTful的接口;

us-east-1c、us-east-1d、us-east-1e等是zone,它們都屬于us-east-1這個region。

關于region和zone的關系,csdn論壇上講得很好。http://bbs.csdn.net/topics/390800408

上圖可以看出Eureka包含兩個元件,Eureka Server和Eureka Client。

Eureka Server提供服務注冊服務,各個節點啟動後,會在Eureka Server中進行注冊,這樣Eureka Server中的服務系統資料庫中将會存儲所有可用服務節點的資訊,服務節點的資訊可以在界面中直覺的看到。

Eureka Client是一個Java用戶端,用于簡化與Eureka Server的互動,用戶端同時也具備一個内置的、使用輪詢(round-robin)負載算法的負載均衡器。

在應用啟動後,将會向Eureka Server發送心跳(預設周期為30秒)。如果Eureka Server在多個心跳周期内沒有接收到某個節點的心跳,Eureka Server将會從服務系統資料庫中把這個服務結點移除(預設90秒)。

Eureka Server之間将會通過複制的方式完成資料的同步。

Eureka還提供了用戶端緩存的機制,即使所有的Eureka Server都挂掉,用戶端依然可以利用緩存中的資訊消費其他服務的API。

綜上,Eureka通過心跳檢測、健康檢查、用戶端緩存等機制,確定了系統的高可用性、靈活性和可伸縮性。

Demo

實作一個Eureka Server

1、建立一個maven project,右鍵->new->maven project

SpringCloud(三):服務發現元件EurekaWhy EurekaWhat EurekaHow EnrekaDemo總結一下:

2、點選下一步,然後填寫相關資訊

SpringCloud(三):服務發現元件EurekaWhy EurekaWhat EurekaHow EnrekaDemo總結一下:

3、建立完成後,修改pom檔案。

<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>

    <parent>
        <groupId>com.itmuch.cloud</groupId>
        <artifactId>microservice-spring-cloud</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

  <artifactId>microservice-discovery-eureka</artifactId>
  <packaging>jar</packaging>


  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </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-security</artifactId>
       </dependency>
   </dependencies>
</project>
           

4、在resouces下添加application.yml檔案

security:
  basic:
    enabled: true
  user:
    name: user
    password: password123
server:
  port: 8761
eureka:
  client:
#    healthcheck:
#        enabled: true
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://user:[email protected]:8761/eureka
           

5、編寫EurekaApplication.java

package com.itmuch.cloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication
{
    public static void main(String[] args )
    {
        SpringApplication.run(EurekaApplication.class, args);
    }
}
           

6、parent的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.itmuch.cloud</groupId>
	<artifactId>microservice-spring-cloud</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>pom</packaging>
	
	<modules>
		<module>microservice-consumer-movie</module>
		<module>microservice-provider-user</module>
		<module>microservice-discovery-eureka</module>
	</modules>
	
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>
	
	<parent>
	    <groupId>org.springframework.boot</groupId>
	    <artifactId>spring-boot-starter-parent</artifactId>
	    <version>1.4.1.RELEASE</version>
	</parent>
	
    <dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Camden.SR1</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>
           

7、啟動并在url中輸入網址:localhost:8761。

輸入使用者名user密碼password123,可以看到Eureka頁面。

SpringCloud(三):服務發現元件EurekaWhy EurekaWhat EurekaHow EnrekaDemo總結一下:

總結一下:

這裡有總結的知識點,也有在實踐中遇到的問題和總結的小技巧。避免踩坑!

1、pom檔案抽取到parent

我們可以看到,将所有的依賴和插件都抽在parent中,就可以統一管理jar包依賴的版本。在這裡spring cloud所用版本為Camden.SR1,剛開始用Finchley.M1怎麼都下載下傳不下來。

将其整合到一塊,當微服務特别多的時候便于統一管理,統一打包部署。

2、安全憑證

Eureka的登入頁面設定使用者名和密碼才能相對安全一些,總不能誰都能通路吧。

具體做法:

1、引jar包

<dependency>
	        <groupId>org.springframework.boot</groupId>
	        <artifactId>spring-boot-starter-security</artifactId>
	   </dependency>
           

2、application.yml的配置

設定使用者名和密碼

security:
  basic:
    enabled: true
  user:
    name: user
    password: password123
           

使用:

eureka:
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://user:[email protected]:8761/eureka
           

3、小技巧:将關閉的項目隐藏

當你的項目特别多的時候,不需要的項目可以關閉隐藏。

SpringCloud(三):服務發現元件EurekaWhy EurekaWhat EurekaHow EnrekaDemo總結一下:
SpringCloud(三):服務發現元件EurekaWhy EurekaWhat EurekaHow EnrekaDemo總結一下:

4、新添加的檔案讓其成為源檔案

在搭建項目的時候我建立了一個resources檔案夾,然後在其中新添了一個appliation.yml檔案,但是運作項目卻讀取不到。原因是其沒有同步到源檔案中。這個時候有兩種解決方法。

第一種:重新導入,導入之前隻保留src和pom檔案,其它像target,.settings生成的檔案全都删除。

第二種:通過build path将其加入源檔案。

SpringCloud(三):服務發現元件EurekaWhy EurekaWhat EurekaHow EnrekaDemo總結一下:
SpringCloud(三):服務發現元件EurekaWhy EurekaWhat EurekaHow EnrekaDemo總結一下:

如上圖,将resources勾選上便可以。

5、簡單聲明一個EurekaServer

一個是在啟動類中加入類的注解@EnableEurekaServer

然後在application.yml中配置:将register-with-eureka和fetch-registry設定為false,目的是不把自己當做client。

eureka:
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://user:[email protected]:8761/eureka
           

完整的源碼将在後期部落格完善後一并分享,後面将繼續總結微服務如何注冊到Eureka Server中,敬請期待。。。

繼續閱讀