1. 程式人生 > >springcloud系列教程|第三章:服務發現元件-eureka

springcloud系列教程|第三章:服務發現元件-eureka

服務發現-eureka

1:前言

     上一篇:springcloud系列教程|第二篇:服務提供者和服務消費者講解了服務提供者和服務消費者的概念,以及使用了小栗子演示了兩個微服務之間的呼叫,那麼接下來將會介紹服務發現-eureka 以及它的使用。

2:環境準備

JDK 1.8
IDEA 
Maven 3.3.9
springboot 1.5.x
springcloud Dalston.SR5

3:為什麼要使用服務發現

     對於執行在物理硬體上的傳統應用,服務例項的網路位置(ip和埠號)是相對固定的,可以從配置檔案中去讀取。然而對於基於雲端的、現代化微服務來說,卻是不可取的,因為服務例項的網路位置經常動態改變,你不可能去通過配置檔案配置固定IP和埠去查詢,所以需要使用服務發現機制。
     服務發現機制分為兩部分:客戶端服務發現和服務端服務發現。

3.1 客戶端發現

     從圖中分析:服務A是服務消費者,服務B是服務提供者,他們都被服務登錄檔管理著,而此時的服務A是作為客戶端去呼叫服務B,也就意味著客戶端決定被呼叫服務B的網路位置,客戶端佔著主導地位。


3.2 服務端發現

     同樣是服務A請求B服務,但是這次不同的是,服務A的請求是將服務傳送到負載均衡,由負載均衡路由到指定的B服務,它佔著主導地位。


4:服務登錄檔

     通過上面的兩種服務發現模式,也不難想象服務登錄檔就是整個服務發現的核心部分,是包含服務例項的網路地址的資料庫。服務登錄檔需要高可用而且隨時更新。客戶端能夠快取從服務登錄檔中獲取的網路地址,當這些資訊過時,客戶端和服務端也無法發現服務。因此,服務登錄檔會包含若干個,使用複製協議保持一致性。

     Netflix Eureka 是客戶端服務登錄檔的典型代表,為註冊和請求服務例項提供了 REST API。服務例項使用 POST 請求來註冊網路地址,每三十秒使用 PUT 請求來重新整理註冊資訊。註冊資訊也能通過 HTTP DELETE 請求或者例項超時來被移除。以此類推,客戶端能夠使用 HTTP GET 請求來檢索已註冊的服務例項。那麼接下來我們將重點介紹Eureka 的原理以及使用。

5:Netflix Eureka簡介

     Eureka是Spring Cloud Netflix微服務套件中的一部分,可以與Springboot構建的微服務很容易的整合起來。Eureka包含了伺服器端和客戶端元件。伺服器端,也被稱作是服務註冊中心,用於提供服務的註冊與發現。客戶端元件包含服務消費者與服務生產者(也就是我們所看到的服務A,服務B,服務C…….

)。在應用程式執行時,Eureka客戶端Eureka伺服器端(註冊中心)註冊自身提供的服務並週期性的傳送心跳來更新它的服務租約。同時也可以從服務端查詢當前註冊的服務資訊並把他們快取到本地並週期性的重新整理服務狀態。

6:實戰-編寫Eureka服務端

     新建Eureka服務端專案:



     
找到如圖所示的地方,把這裡的pom檔案拷貝到你剛新建的專案下: 注意引入完成之後要更改eureka的pom檔案,spring-cloud-starter-eureka -> spring-cloud-starter-eureka-server


<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.13.RELEASE</version>
</parent>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Dalston.SR5</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-config</artifactId>
    </dependency>
    /*因為這是eureka的伺服器端,所以要引入eureka的服務端依賴*/
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka-server</artifactId>
    </dependency>
</dependencies>

     接下來配置一下application.yml檔案:

server:
  port: 8888
eureka:
  client:
    register-with-eureka: false #表示是否註冊到eureka伺服器中,因為它就是eureka伺服器所以沒有必要
    fetch-registry: false  #fetchRegistry表示是否從eureka伺服器獲取註冊資訊 因為它本身就是伺服器,所以也沒有必要
    service-url:
      defaultZone: http://localhost:8888/eureka #rureka的服務端地址

     最後一步:添加註解

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

     我們來看看eureka的服務端長的什麼樣子:


7:實戰-編寫Eureka客戶端服務提供者

     請檢視這篇springcloud系列教程|第二篇:服務提供者和服務消費者去獲取程式碼,同樣分別需要在pom檔案、application.yml和啟動類做一點改動,如下:

     pom檔案新增兩段:注意這裡的spring-cloud-starter-eureka沒有加-server,因為它是服務端

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Dalston.SR5</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

        <!--eureka-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>

     application.yml配置:

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8888/eureka
  instance:
    prefer-ip-address: true  #滑鼠移動到地址上會顯示ip地址

     啟動類配置:

@EnableEurekaClient
@SpringBootApplication
@MapperScan("com.springcloud.microserivceprovider.mapper")
public class MicroserivceProviderApplication {

    public static void main(String[] args)
    {
        SpringApplication.run(MicroserivceProviderApplication.class, args);
    }
}

     eureka客戶端服務消費者配置跟服務提供者一模一樣,這裡就不再贅述,我將提供原始碼給大家參考學習,有問題可以私聊或者留言,天天會看的哦。

     最後我們看到eureka伺服器上註冊了兩個服務:


      加入群聊一起學習springcloud:877750371

      如果有小夥伴覺得我寫的不錯的話可以關注一下我的部落格,我會一直持續更新,也可以支援一下我的公眾號哦:coldStone,主要會分享分散式系統相關的一系列技術,目前會推出springboot、springcloud和docker系列教程,後期會有關於中介軟體以及各個層面的效能優化的文章,同時還會分享一些賺錢理財的小套路哦,歡迎大家來支援,一起學習成長,程式設計師不僅僅是搬瓦工!