spring cloud (一)服務治理

謎一樣的Coder發表於2018-08-30

前言

spring cloud在官網的定義非常抽象,並沒有一個通俗的描述。其實簡單點說,spring cloud 是基於spring boot的,最適合用於管理spring boot建立的各個微服務應用。spring cloud使用的eureka server,然後所有需要訪問的應用都作為一個eureka client註冊上去。eureka是一個高可用元件,沒有後端快取,每一個例項註冊之後需要向註冊中心傳送心跳。一個eureka server也是一個eureka client。

這裡依舊只是實現hello world級別的程式,遇到的深入的問題,需要後面深入以後再做總結。

相關概念

服務註冊

在服務治理框架中,通常都會構建一個註冊中心,每個服務單元向註冊中心登記自己提供的服務,將主機埠號,版本號,通訊協議等一些附加資訊告知註冊中心。註冊中心按服務名分類組織服務清單。

另外服務中心還會以心跳的方式去監測清單中的服務是否可用,若不可用需要從服務清單中剔除,達到排除故障服務的效果。

服務發現

在服務治理框架下,服務間的呼叫不再是通過制定具體的例項地址來實現(原來的web service貌似就是這種方式),而是通過向服務名發起請求呼叫來是實現。所以,服務呼叫方在呼叫服務提供方介面的時候,並不知道具體的服務例項地址。因此呼叫方需要向服務註冊中心諮詢服務,並獲得所有服務的例項清單,以實現對具體服務的訪問。

spring cloud Eureka

使用Netflix Eureka來實現服務註冊與發現,它包含了服務端元件也包含了客戶端元件。通用性還可以(對不相容JVM的語言,需要自己編寫客戶端程式)。

Eureka服務端——可以理解為服務註冊中心

Eureka客戶端——想註冊中心註冊自己提供的服務並週期性的傳送心跳來更新他的服務租約。同時,也能從服務端查詢當前註冊的服務資訊並把他們快取到本地並週期性的重新整理服務狀態。

上述概念暫時簡單理解就行,下面進行相關例項的搭建

搭建服務註冊中心

1、進入start.spring.io構建spring boot

需要新增eureka

2、在配置檔案中加入如下屬性

server.port=8898
eureka.instance.hostname=localhost
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/

server.port是設定服務註冊中心的埠號

eureka.client.register-with-eureka=false:由於該應用為註冊中心,所以設定為false。表示不想註冊中心註冊自己

eureka.client.fetch-registry=false:註冊中心的職責就是維護服務例項,並不需要去檢索服務,因此也設定為false。

3、在主類中打上@EnableEurekaServer註解

@EnableEurekaServer
@SpringBootApplication
public class Application {

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

執行程式,訪問配置的服務地址,localhost:8898/,即可看到註冊中心的頁面。

搭建服務註冊者

這一步與之前的步驟無二,只是需要在主類中加上@EnableEurekaClient,註解即可

在配置檔案中將那個埠改成與註冊中心不同的埠,如下所示:

#指定服務註冊中心的地址
eureka.client.service-url.defaultZone:http://localhost:8898/eureka/

#指定服務的名稱
spring.application.name=service-helloworld

#消費端埠號
server.port=8897

訪問localhost:8897/

註冊中心可以看到服務已經註冊

 總結

hello world級別的,還有什麼好總結的,low爆了,後面加入高可用的註冊中心......

相關文章