Spring Cloud 是一個基於Spring Boot 實現的微服務架構開發工具。它爲微服務架構中涉及的配置管理、服務治理、斷路器、智能路由、微代理、控制總線、全局鎖、決策競選、分佈式繪畫和集羣狀態管理等操做提供了一種簡單的開發方式。html
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等項目git
服務治理能夠說是微服務架構中最爲核心和基礎的模塊,它主要用來實現各個微服務示例的自動化註冊與發現。服務治理主要分爲兩步:github
Spring Cloud Eureka,使用Netfix Eureka 來實現服務註冊與發現,它即包含了服務端組件,也包含了客戶端組件。web
Spring Cloud Eureka是Spring Cloud Netflix項目下的服務治理模塊。而Spring Cloud Netflix項目是Spring Cloud的子項目之一,主要內容是對Netflix公司一系列開源產品的包裝,它爲Spring Boot應用提供了自配置的Netflix OSS整合。經過一些簡單的註解,開發者就能夠快速的在應用中配置一下經常使用模塊並構建龐大的分佈式系統。它主要提供的模塊包括:服務發現(Eureka),斷路器(Hystrix),智能路由(Zuul),客戶端負載均衡(Ribbon)等spring
Eureka Server 咱們能夠稱之爲服務註冊中心,它同其餘註冊中心同樣,支持高可用配置,常見的註冊中心有:segmentfault
服務註冊中心,即將當前服務狀態註冊到註冊中心,便於其餘服務發現以及調用。bash
Eureka Server 是 EurekaClient 的註冊服務中心,管理全部註冊服務,以及其示例信息和狀態服務器
相關依賴:org.springframework.cloud:spring-cloud-starter-netflix-eureka-server
激活服務:@EnableEurekaServer
複製代碼
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.app
摳腳翻譯:
服務發現 是微服務體系結構中很是關鍵的一個環節。嘗試經過手動去管理配置每一個客戶端或着相關協議是很是困難的一件事。Eureka 是 Netflix服務的服務端與客戶端。它能夠配置和部署服務器使其具備高可用性,而且將每一個服務的註冊狀態同步到其餘服務器中。
接下來咱們手動操做一把,經過Idea 快速建立一個 Eureka Server 服務註冊中心。
服務名:spring-cloud-eureka
咱們在構建服務時,建立基於Spring Boot 的程序 ,詳情參考傳送門
<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
便可
啓動類須要加上 @EnableEurekaServer
進行服務註冊中心啓動
@SpringBootApplication
@EnableEurekaServer
public class SpringCloudEurekaApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudEurekaApplication.class, args);
}
}
複製代碼
相關配置信息:
//服務端口
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
複製代碼
服務啓動後,打開地址:http://localhost:8761/
咱們能夠看到,目前並無服務註冊到咱們的註冊中心中。
與服務端不一樣,這裏引入的依賴爲: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>
複製代碼
@EnableEurekaClient
該註解能激活Eureka中的DiscoveryClient實現,這樣才能實現Controller中對服務信息的輸出。
@SpringBootApplication
@EnableEurekaClient
public class SpringCloudEurekaClientApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudEurekaClientApplication.class, args);
}
}
複製代碼
server.port=8762
//服務名稱
spring.application.name = jaycekon-hi
//服務註冊中心地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka
複製代碼
服務啓動後,打開地址: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