微服務(wù)治理:eureka
1.服務(wù)注冊:服務(wù)治理框架中通常會構(gòu)建一個注冊中心,每個服務(wù)單元向注冊中心登記自己提供的服務(wù),提供相關(guān)的主機、端口號、版本號、通信協(xié)議等信息告知注冊中心,注冊中心按服務(wù)名分類組織服務(wù)清單。服務(wù)注冊中心還需要以心跳的方式去監(jiān)測清單中的服務(wù)是否可用,若不可用需要從服務(wù)清單中剔除,達到排除故障服務(wù)的效果。
2、服務(wù)發(fā)現(xiàn):在服務(wù)治理框架下運作,服務(wù)間的調(diào)用不再通過制定具體的實例地址來實現(xiàn),而是通過向服務(wù)名發(fā)起請求調(diào)用實現(xiàn),服務(wù)調(diào)方在調(diào)用服務(wù)提供方接口的時候,并不知道具體的服務(wù)實例位置。因此調(diào)用方需要向服務(wù)注冊中心咨詢服務(wù),并獲取所有服務(wù)的實例清單,以實現(xiàn)對具體服務(wù)實例的訪問。調(diào)用方獲取到清單后,以某種輪訓(xùn)策略取出一個位置來進行服務(wù)調(diào)用。
eureka既包括服務(wù)端組件,也包含客戶端組件。
搭建服務(wù)注冊中心:
1、引入依賴
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.6.RELEASE</version>
<relativePath/>
</parent>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2、注解啟動注冊中心
通過@EnableEurekaServer注解啟動一個注冊中心提供給其他應(yīng)用進行對話。
@EnableEurekaServer
@SpringBootApplication
public class Application {
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class).web(七rue).run(args);
}
}
默認(rèn)設(shè)置下,該服務(wù)注冊中心也會將自己作為客戶端來注冊自己。所以需要禁用她的客戶端行為:
? eureka.client.register-with-eureka: 由于該應(yīng)用為注冊中心,所以設(shè)置為false,代表不向注冊中心注冊自己。
? eureka.client.fetch-registry: 由于注冊中心的職責(zé)就是維護服務(wù)實例,它并不需要去檢索服務(wù),所以也設(shè)置為 false。
注冊服務(wù)提供者搭建:主類上添加@EnableDiscoveryClient注解
客戶端負載均衡:ribbon
ribbon是一個基于http和tcp的客戶端負載均衡工具。springcloud實現(xiàn)對對ribbon的負載均衡調(diào)用只需兩步:
1、服務(wù)提供者只需要啟動多個服務(wù)實例并注冊到一個注冊中心或多個相關(guān)聯(lián)的服務(wù)注冊中心。
2、服務(wù)消費者直接通過調(diào)用被@LoadBalanced注解修飾過的RestTemplate來實現(xiàn)面向服務(wù)的接口調(diào)用。
容錯斷路器hystrix
設(shè)置網(wǎng)絡(luò)超時、出問題時候自動快速失敗,處于半開狀態(tài),通過一個請求過去試一下服務(wù)是否恢復(fù),如果恢復(fù)了,立馬關(guān)閉斷路器,還不行,繼續(xù)打開斷路器
通過在工程主類中添加@Enable--CircuitBreaker注解開啟斷路器功能:
其實@SpringCloudApplication這一個注解就包含了服務(wù)發(fā)現(xiàn)和斷路器功能:
@SpringBootApplication
@EnableDiscoveryClient
@EnableCircuitBreaker
聲明式服務(wù)調(diào)用feign:
創(chuàng)建一個接口,并在接口上添加一些注解@FeignClient,代碼就完成了。feign支持多種類型的注解,自帶的和JAX-RS注解等。springcloud對feign進行了增強,使其支持springmvc注解,并整合了ribbon和eureka功能。
網(wǎng)關(guān)服務(wù)zuul