SpringCloud學習筆記4
零、springcloud細節問題(回顧)
- Eureka Server
- Eureka Client
- @EnableEurekaClient 專用於Eureka Server註冊中心
- @EnableDiscoveryClient 通用任何註冊中心
- 客戶端的呼叫方式
- restTemplate + ribbon
ribbon(軟負載均衡 預設 輪詢)
客戶端僅引入兩個依賴(spring-cloud-starter-eureka和spring-cloud-starter-ribbon),無須額外註解配置 - Feign 推薦
引入依賴
建立介面(@FeignClient(“呼叫服務名稱”))
入口類 @EnableFeignClients
- Hystrix斷路器 斷掉宕機的服務
-
restTemplate使用
@HystrixCommand(fallbackMethod = “errorHello”)
入口類中加入@EnableHystrix -
Feign
開啟斷路器 yml中
feign:
hystrix:
enabled: true
@FeignClient( value=“HELLO-SERVICE” ,fallback=實現類.class) //明確該介面對eureka中的哪個服務
- 專案引入依賴梳理
- EurekaServer
spring-cloud-starter-eureka-server - EurekaClient
spring-cloud-starter-eureka 服務註冊,發現功能,restTemplate客戶端呼叫
spring-cloud-starter-feign feign客戶端呼叫
spring-cloud-starter-hystrix 斷路器
-
springcloud提供的註解
@SpringCloudApplication 相當於下面三個
@SpringBootApplication
@EnableDiscoryClient
@EnableCircuitBreaker //預設開啟斷路器 -
其他
- 服務提供者 或 服務消費者 在引入starter-eureka之後,自動依賴 feign enableDiscoverClient
一、SpringCloud統一配置中心 引言
- 為什麼需要統一配置中心?
統一配置中行顧名思義,就是將配置統一管理,配置統一管理的好處是在以後大規模叢集部署服務應用時相同的服務配置一致,日後再修改配置只需要統一修改全部同步,不需要一個一個服務手動維護。 - 解決問題:
①配置檔案的維護問題
②安全隔離配置檔案
簡而言之:操作一處,修改全域性。 - 統一配置中心的架構圖
二、搭建統一配置中心
- 引入依賴
- 在入口類加入 @EnableConfigServer
- 在Aapplication中配置遠端倉庫位置
- config.server預設尋找配置解析
三、Zuul(路由閘道器)
-
微服務!!!
因為,現在開發的模式發生了變化,公司為減輕人員流動帶來的影響,往往從服務擴充套件的角度進行業務拆分。按功能拆分服務,每個人員只開發一小模組,減少專案與專案之間的功能耦合。而且又因為模組小,可以減輕測試時啟動部署的時間。 -
微服務系統(最簡單的微服務系統架構)
在微服務架構中,需要一個基礎的服務治理元件,包括服務註冊與發現、服務消費、負載均衡、斷路器、智慧路由、配置管理等,由這一個基礎元件相互協作,共同組建了一個簡單的微服務系統。一個簡單的微服務系統如下圖:
總結:在SpringCloud微服務系統中,一種常見的負載均衡方式是,客戶端的請求首先經過負載均衡(zuul、Ngnix),再到達服務閘道器(zuul叢集),然後再到具體的附物。服務統一註冊到高可用的服務註冊中心叢集,服務的所有的配置檔案由配置服務管理,配置服務的配置檔案放在git倉庫,方便開發人員隨時改配置。
- Zuul簡介.
Zuul的主要功能是路由轉發 和過濾器 。路由功能是微服務的一部分,比如/api/user轉發到到user服務,/api/shop轉發到到shop服務。
zuul預設和Ribbon結合實現了負載均衡的功能。 - 搭建zuul閘道器
①.依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>
②.編寫入口類
@SpringBootApplication
@EnableDiscoveryClient
@EnableZuulProxy
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
③.配置檔案
server:
port: 8760
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka
spring:
application:
name: zuul
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 5000
management:
security:
enabled: false
zuul:
routes:
product:
path: /aa/**
serviceId: PRODUCT #serviceId書寫的是之前的ribbon與feign的應用名稱
aaaa:
path: /bb/**
serviceId: ORDER
其他、底層的架構原理圖
其他、對比
微服務中,首先肯定離不開服務開發、服務配置與管理、服務註冊與發現、服務的呼叫、熔斷器以及負載均衡等等,除此之外,還有服務的路由、監控、部署,還有可能涉及到一些中介軟體等等。
這些技術棧都有一些對應的落地技術實現,具體如下: