注冊中心
- 1:Eureka 服務(wù)的注冊中心
- 2:Consul 服務(wù)注冊中心自帶了eureka
通過 @EnableEurekaServer 注解在一個(gè)普通的SpringBoot應(yīng)用中開啟一個(gè)服務(wù)注冊中心,在默認(rèn)情況下,其會默認(rèn)將自己認(rèn)為是客戶端向服務(wù)端注冊自己,其本身就是一個(gè)服務(wù)端注冊中心,要修改其默認(rèn)注冊行為
@EnableDiscoveryClient
在SpringBoot的應(yīng)用主類上加上此注解,來激活Eureka中DiscoveryClient的實(shí)現(xiàn),通過在controller里注入此類來獲取到服務(wù)端信息的輸出加入到當(dāng)前服務(wù)體系中,每一個(gè)客戶端都需要加上這個(gè)注解來讓服務(wù)端找到自己并加入到服務(wù)端
@EnableEurekaClient
SpringBoot的應(yīng)用主類中加上此注解表明自己是Eureka的Client
- 結(jié)論
兩個(gè)注解都是為了向注冊中心表明自己是服務(wù)注冊中心的Client
共同點(diǎn),他們都需要在application.yml配置文件中,配置注冊中心的地址
不同點(diǎn),@EnableDiscoveryClient注解,服務(wù)注冊中心可以是Eureka也可以是Consul也可以是zookeeper 但是@EnableEurekaClient注解其服務(wù)注冊中心最好是Eureka
服務(wù)消費(fèi)
- 1:LoadBalancerClient (隨機(jī)選取)
客戶端負(fù)載均衡 choose 函數(shù)從服務(wù)注冊中心隨機(jī)選取一個(gè)client實(shí)列,可以從這個(gè)實(shí)列里來獲取host加端口去訪問消費(fèi)client
- 2:Spring Cloud Ribbon (列表輪詢)
客戶端負(fù)載均衡 是基于Netflix Ribbon實(shí)現(xiàn)的一套客戶端負(fù)載均衡的工具。它是一個(gè)基于HTTP和TCP的客戶端負(fù)載均衡器拜效。它可以通過在客戶端中配置ribbonServerList來設(shè)置服務(wù)端列表去輪詢訪問以達(dá)到均衡負(fù)載的作用迂猴。
使用ribbon時(shí)url參數(shù)沒有拼接直接調(diào)用服務(wù)砰左,因springCloud Ribbon有一個(gè)攔截器能夠?qū)崿F(xiàn)在實(shí)際調(diào)用的時(shí)候去選擇實(shí)列的服務(wù)婚陪,并將實(shí)際要請求的IP地址和端口替換這里的服務(wù)名茎活,從而完成服務(wù)接口的調(diào)用仍劈。
添加一個(gè)負(fù)載均衡的支持
@LoadBalanced,@Bean一個(gè)RestTemplate 就擁有了負(fù)載均衡的效果,拿到 RestTemplate對象直接請求,url地址,spring Ribbon攔截器會攔截住請求,將url替換成對應(yīng)的IP和端口去列表輪訓(xùn)訪問client 如果不添加@LoadBalanced 會報(bào)無法映射,因映射ip:port是LoadBlanceClient實(shí)現(xiàn),
- Fegin (目前來看負(fù)載均衡方式列表循環(huán))
基于ribbon實(shí)現(xiàn)的 聲明式服務(wù)調(diào)用客戶端 快速而又簡潔,通過接口來聲明定義調(diào)用的服務(wù),實(shí)現(xiàn)了可插拔式調(diào)用,同時(shí)擴(kuò)展了 springMvc注解的支持整合了ribbon和eureka提供負(fù)載均衡的HTTP客戶端實(shí)現(xiàn)
通過@EnableFeignClients開啟fegin客戶端加上@EnableDiscoveryClient上讓eureka發(fā)現(xiàn)服務(wù),接口通過@FeignClient("eureka-client")eureka上注冊的服務(wù)實(shí)列 通過@GetMapping("/dc") 調(diào)取對應(yīng)服務(wù)實(shí)列接口(本次注冊eureka上服務(wù)實(shí)列為三個(gè))
Spring Cloud Config(實(shí)現(xiàn)了應(yīng)用多環(huán)境的外部化配置以及版本管理)
用來為分布式系統(tǒng)中的基礎(chǔ)設(shè)施和微服務(wù)應(yīng)用提供集中化的外部配置支持,分兩個(gè)方向 服務(wù)端,客戶端娄猫。
- 服務(wù)端
通過@EnableConfigServer注解開啟一個(gè)服務(wù)環(huán)境配置中心,默認(rèn)實(shí)現(xiàn)了與git倉庫存儲配置信息,通過在git倉庫修改配置文件內(nèi)容或信息,讓客戶端加載到配置倉庫里的配置信息,(接口,加密算法,解密,等都可以配置在配置倉庫)
- 客戶端
通過連接服務(wù)端,獲取服務(wù)端里倉庫配置中心里環(huán)境文件配置信息(接口,加密算法等等)
Spring Cloud Hystrix
在Spring Cloud Hystrix中實(shí)現(xiàn)了線程隔離椅您、斷路器等一系列的服務(wù)保護(hù)功能外冀。它也是基于Netflix的開源框架 Hystrix實(shí)現(xiàn)的,該框架目標(biāo)在于通過控制那些訪問遠(yuǎn)程系統(tǒng)掀泳、服務(wù)和第三方庫的節(jié)點(diǎn)雪隧,從而對延遲和故障提供更強(qiáng)大的容錯(cuò)能力。Hystrix具備了服務(wù)降級员舵、服務(wù)熔斷脑沿、線程隔離、請求緩存马僻、請求合并以及服務(wù)監(jiān)控等強(qiáng)大功能庄拇。
服務(wù)降級
- @HystrixCommand 服務(wù)降級處理。
服務(wù)消費(fèi)方觸發(fā)服務(wù)請求超時(shí)異常服務(wù)消費(fèi)通過@HystrixCommand("兄弟這可不是字符串而是你指定要執(zhí)行的方法") 中指定的降級邏輯去處理了
Spring Cloud Zuul
- 網(wǎng)關(guān)服務(wù) 配置了統(tǒng)一入口Api
zuzu和eureka結(jié)合時(shí),它默認(rèn)會去eureka里去尋找client ,通過路徑上輸出的client的serivceId去尋找eureka里的client
- 如下
http://localhost:1112/eureka-client/dc 這個(gè)地址中eureka-client 進(jìn)到zuzu,zuzu會去eureka里去尋找client的serviceId為eureka-client的client找到了默認(rèn)以列表輪訓(xùn)的方式去訪問client韭邓。
這里它默認(rèn)負(fù)載均衡的方式為ribbon(列表輪訓(xùn)訪問) 也可以通過配置路由規(guī)則
zuul:routes:服務(wù)名:要映射路徑:映射client的url:
方式: Y M L文件配置
zuul:
routes:
# single-instance
api-a:
path: /api-a/**
url: http://localhost:2004/
api-b:
path: /api-b/**
serviceId: api-b
api-b: //注意這里需要設(shè)置ribbon默認(rèn)不去加載否則加載注冊中心的client
ribbon:
listOfServers: http://localhost:2003/, http://localhost:2002/
ribbon:
eureka:
enabled: false//禁止默認(rèn)前往eureka里尋找client清單
Spring Cloud Zuul過濾器(配置過濾請求規(guī)則)