========================================
=========== 介紹
========================================
Spring Cloud是分布式微服務的一站式解決方案,是多種微服務架構落地技術的集合體,俗稱:微服務全家桶。
Srping Cloud 和 Spring Boot 是魚和水的關系。
分布式:一個業務分拆多個子業務,部署在不同的服務器上
分布式是以縮短單個任務的執行時間來提升效率的,而集群則是通過提高單位時間內執行的任務數來提升效率。
分布式部署在不同的服務器上,微服務的應用也可以是同一個服務器。
核心:
基於HTTP協議,跟Dubbo最本質的區別,Dubbo核心基於RPC。
技術組件:
注冊中心:Eureka,服務之間互相發現
客戶端負載均衡:Ribbon
聲明式遠程方法調用:OpenFeign
服務降級、熔斷:Hystrix
網關:Zuul
環境:
Spring Boot 2.0+
Maven 3.3+
========================================
=========== 創建Spring Cloud項目
========================================
1. 創建Maven項目
2. pom導入SpringCloud父工程依賴
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.SR2</version>
<type>pom</type>
<!-- 表示將spring-cloud-dependencies包中的依賴信息導入 -->
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.6.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
3. 在pom增加packaging值為pom(設置打包方式為pom)
4. 父工程是pom工程,所以把父工程下的src文件夾刪除掉,項目只有一個pom.xml文件
5. 創建common通用工程,存放entity實體類
6. 創建provider工程,添加通用工程和spring-boot-starter-web依賴、spring-cloud-starter-netflix-eureka-client,創建啟動類和controller
7. 創建consumer工程,添加通用工程和spring-boot-starter-web依賴、spring-cloud-starter-netflix-eureka-client、spring-cloud-starter-netflix-ribbon,創建啟動類、配置類和controller
8. 創建euerka工程(服務注冊中心),添加spring-cloud-starter-netflix-eureka-server依賴(需要maven3以上,idea整合的maven3只支持spring-cloud-starter-eureka-server,但是被棄用了)
加入Hystrix后,provider服務端異常則進行熔斷,timeout則consumer客戶端進行降級。(客戶端異常自動降級,服務器異常自動熔斷)
========================================
parent 控制依賴包版本
common 通用服務存放實體類
provider 生產者 存放 controller
consumer 消費者 遠程訪問 provider
euerka 注冊中心
dashboard Hystrix儀表盤,服務監控
zuul 網關
provider注冊到euerka
consumer從euerka訂閱
consumer通過Ribbon實現負載均衡,訪問provider在euerka注冊的地址
========================================
=========== 注解
========================================
@EnableEurekaServer 啟用Eureka服務端功能
@EnableEurekaClient 啟用Eureka客戶端功能
@EnableDiscoveryClient 啟用發現服務(不僅包括Eureka)功能
@LoadBalanced 啟用Ribbon負載均衡
========================================
通過Feign, 我們能把HTTP遠程調用對開發者完全透明,得到與調用本地方法一致的編碼體驗。
這一點與阿里Dubbo中暴露遠程服務的方式類似,區別在於Dubbo是基於私有二進制協議,而Feign本質上還是個HTTP客戶端。
如果是在用Spring Cloud Netflix搭建微服務,那么Feign無疑是最佳選擇。
Hystrix
熔斷:provider
服務端引入依賴spring-cloud-starter-netflix-hystrix
啟動類開啟@EnableCircuitBreaker
方法接口指定錯誤執行方法@HystrixCommand(fallbackMethod = "方法")
降級:consumer
屬性文件設置feign.hystrix.enabled: true
1. 實現FallbackFactory接口時,要傳入@FeignClient注解標記的接口類型
2. 在create方法中返回@FeignClient注解標記的接口對象,當provider調用失敗時,會執行這個對象對應的方法
儀表盤:provider
服務端引入依賴spring-boot-starter-actuator
屬性文件設置management.endpoints.web.exposure.include: hystrix.stream
創建dashboard服務,啟動類開啟@EnableHystrixDashboard
訪問ip:post/hystrix,訪問監控項目首頁,寫入被監控的服務端方法訪問地址,開始監控
請求 -> Zuul -> 請求特征(隱藏服務名) -> 微服務名稱(通過riboon) -> Eureke -> 具體微服務...
Zuul網關的作用
統一入口:未全部為服務提供一個唯一的入口,網關起到外部和內部隔離的作用,保障了后台服務的安全性。
鑒權校驗:識別每個請求的權限,拒絕不符合要求的請求。
動態路由:動態的將請求路由到不同的后端集群中。
減少客戶端與服務端的耦合:服務可以獨立發展,通過網關層來做映射。