Spring Cloud 簡介
Spring Cloud 是一個基於Spring Boot 實現的微服務架構開發工具。它為微服務架構中涉及的配置管理、服務治理、斷路器、智慧路由、微代理、控制匯流排、全域性鎖、決策競選、分散式繪畫和叢集狀態管理等操作提供了一種簡單的開發方式。
Spring Cloud包含了多個子專案(針對分散式系統中涉及的多個不同開源產品),比如:Spring Cloud Config、Spring Cloud Netflix、Spring Cloud CloudFoundry、Spring Cloud AWS、Spring Cloud Security、Spring Cloud Commons、Spring Cloud Zookeeper、Spring Cloud CLI等專案
服務治理
服務治理可以說是微服務架構中最為核心和基礎的模組,它主要用來實現各個微服務示例的自動化註冊與發現。服務治理主要分為兩步:
- 服務註冊
- 服務發現
Spring Cloud Eureka
Spring Cloud Eureka,使用Netfix Eureka 來實現服務註冊與發現,它即包含了服務端元件,也包含了客戶端元件。
Spring Cloud Eureka是Spring Cloud Netflix專案下的服務治理模組。而Spring Cloud Netflix專案是Spring Cloud的子專案之一,主要內容是對Netflix公司一系列開源產品的包裝,它為Spring Boot應用提供了自配置的Netflix OSS整合。通過一些簡單的註解,開發者就可以快速的在應用中配置一下常用模組並構建龐大的分散式系統。它主要提供的模組包括:服務發現(Eureka),斷路器(Hystrix),智慧路由(Zuul),客戶端負載均衡(Ribbon)等
Eureka 服務端
Eureka Server 我們可以稱之為服務註冊中心,它同其他註冊中心一樣,支援高可用配置,常見的註冊中心有:
- Apache Zookeeper
- Netflix Eureka
- Consul
服務註冊中心,即將當前服務狀態註冊到註冊中心,便於其他服務發現以及呼叫。
Eureka Server 是 EurekaClient 的註冊服務中心,管理所有註冊服務,以及其示例資訊和狀態
相關依賴:org.springframework.cloud:spring-cloud-starter-netflix-eureka-server
啟用服務:@EnableEurekaServer
複製程式碼
Eureka 客戶端
Eureka Client 主要處理服務的註冊與發現。在Spring Cloud 官方文件中這樣描述:
Service Discovery is one of the key tenets of a microservice based architecture. Trying to hand configure each client or some form of convention can be very difficult to do and can be very brittle. Eureka is the Netflix Service Discovery Server and Client. The server can be configured and deployed to be highly available, with each server replicating state about the registered services to the others.
摳腳翻譯:
服務發現 是微服務體系結構中非常關鍵的一個環節。嘗試通過手動去管理配置每個客戶端或著相關協議是非常困難的一件事。Eureka 是 Netflix服務的服務端與客戶端。它可以配置和部署伺服器使其具有高可用性,並且將每個服務的註冊狀態同步到其他伺服器中。
Spring Eureka Server
接下來我們手動操作一把,通過Idea 快速建立一個 Eureka Server 服務註冊中心。
服務名:spring-cloud-eureka
我們在構建服務時,建立基於Spring Boot 的程式 ,詳情參考傳送門
1、Maven 依賴
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
...
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
...
複製程式碼
在專案依賴方面,Spring Cloud Eureka
服務端非常簡單,主要是基於Spring Boot
,其次引入 spring-cloud-starter-netflix-eureka-server
即可
2、SpringCloudEurekaApplication
啟動類需要加上 @EnableEurekaServer
進行服務註冊中心啟動
@SpringBootApplication
@EnableEurekaServer
public class SpringCloudEurekaApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudEurekaApplication.class, args);
}
}
複製程式碼
3、application.properties
相關配置資訊:
//服務埠
server.port=8761
//eureka 服務地址
eureka.instance.hostname=localhost
//是否將當前服務註冊到 Eureka 註冊中心
eureka.client.registerWithEureka=false
eureka.client.fetchRegistry=false
//服務地址
eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
//服務名稱
spring.application.name=eureka-server
複製程式碼
4、啟動服務
服務啟動後,開啟地址:http://localhost:8761/
我們可以看到,目前並沒有服務註冊到我們的註冊中心中。
Spring Eureka Client
1、Maven 依賴
與服務端不同,這裡引入的依賴為:spring-cloud-starter-netflix-eureka-client
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
複製程式碼
2、SpringCloudEurekaClientApplication
@EnableEurekaClient
該註解能啟用Eureka中的DiscoveryClient實現,這樣才能實現Controller中對服務資訊的輸出。
@SpringBootApplication
@EnableEurekaClient
public class SpringCloudEurekaClientApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudEurekaClientApplication.class, args);
}
}
複製程式碼
3、application.properties
server.port=8762
//服務名稱
spring.application.name = jaycekon-hi
//服務註冊中心地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka
複製程式碼
4、啟動服務
服務啟動後,開啟地址:http://localhost:8761/
我們可以看到,服務已經成功註冊到Eureka Server 中。
總結
原始碼地址:https://github.com/jaycekon/Spring-Cloud
參考資料:
https://cloud.spring.io/spring-cloud-static/Dalston.SR5/single/spring-cloud.html#_service_discovery_eureka_clients
http://blog.didispace.com/spring-cloud-starter-dalston-1/
https://segmentfault.com/l/1500000011386051/play