1. 程式人生 > >SpringCloud實戰1

SpringCloud實戰1

服務發現簡介

   服務提供者,服務消費者,服務發現元件這三者關係大致如下:

   1、服務提供者啟動後,將自己的網路地址等資訊註冊到服務發現元件中,服務發現元件會儲存這些資訊。

   2、服務消費者可從服務發現元件中查詢服務提供者的網路地址,並使用該地址呼叫服務提供者的介面。

  3、各個微服務與發現元件會使用一定的機制(例如心跳)通訊,服務發現元件若長時間無法與某個服務例項通訊,則會登出改例項。

  4、微服務網路地址發生變更(例如增減或者IP埠發生變化)時,會重新註冊到服務發現元件。

   服務發現元件應具備以下功能

   1、服務登錄檔:是服務發現元件的核心,用來記錄各個微服務的資訊,服務登錄檔提供查詢api和管理api,查詢api用於查詢可用的微服務例項,管理api用於服務的註冊和登出。

   2、服務的註冊和發現:服務註冊只微服務啟動時,將自己的資訊註冊到服務發現元件的過程。服務發現指查詢可用微服務列表及其網路地址的機制。

   3、服務檢查:服務發現元件使用一定機制定時檢查已註冊的服務,如發現某例項長時間無法訪問,就會從服務登錄檔中移除。

   Eureka

   Eureka包含兩個元件,Eureka Server 和 Eureka Client,他們的作用如下
   Eureka Server:提供服務發現的能力,各個微服務啟動後會想Eureka Server註冊自己的資訊(IP,埠,微服務名稱等), Eureka Server會儲存這些資訊。Eureka Client : 是一個java客戶端,用於簡化與Eureka Server的互動。

   服務啟動後,會週期性(30秒)向Eureka Server 傳送心跳以續約自己的"租期"

   如果Eureka Server一定時間內沒有收到某個微服務的心跳,Eureka Server會登出該例項(預設90秒)。

   預設情況下Eureka Server也是Eureka Client,多個Eureka Server例項互相之間通過複製的方式來實現服務登錄檔中資料的同步。

   Eureka Client 會快取服務登錄檔中的資訊,這樣微服務無需每次都查詢Eureka Server從而降低了Eureka Server的壓力,其次,及時Eureka Server所有節點都宕機,服務消費者依然可以使用快取中的資訊找到服務提供者並完成呼叫。

  編寫Eureka Server

   1、建立一個springboot的父子專案,在子專案新增以下依賴。

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

2、編寫啟動類,在啟動類上新增 @EnableEurekaServer註解,宣告是一個Eureka Server。

@SpringBootApplication
@EnableEurekaServer //宣告這是一個Eureka Server服務
public class YmkEurekaServerApplication {

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

3、在配置檔案application.yml中新增以下內容

server:
  port: 8761                    # 指定該Eureka例項的埠
eureka:
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

這樣一個Eureka Server服務就好了,是不是很簡單!

下面講解下application.yml中的配置屬性 

eureka: client: registerWithEureka :表示是否將自己註冊到Eureka Server中,預設是true,由於當前應用就是Eureka Server,所以設定false。

eureka: client: fetchRegistry:表示是否從Eureka Server獲取註冊資訊,預設為true,因為這是一個單點的Eureka Server,不需要同步其他的Eureka Server節點的資料,所以設定false。

eureka: client: serviceUrl: defaultZone :設定與Eureka Server互動的地址,查詢服務和註冊服務都依賴這個地址,多個地址逗號分隔。
 

 下節將介紹如何將服務提供者註冊到Eureka Server上面