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