在微服務(wù)架構(gòu)中,需要幾個(gè)基礎(chǔ)的服務(wù)治理組件举哟,包括服務(wù)注冊(cè)與發(fā)現(xiàn)、服務(wù)消費(fèi)迅矛、負(fù)載均衡妨猩、斷路器、智能路由秽褒、配置管理等壶硅,由這幾個(gè)基礎(chǔ)組件相互協(xié)作,共同組建了一個(gè)簡單的微服務(wù)系統(tǒng)销斟。一個(gè)簡答的微服務(wù)系統(tǒng)如下圖:
? ?
注意:A服務(wù)和B服務(wù)是可以相互調(diào)用的庐椒,作圖的時(shí)候忘記了。并且配置服務(wù)也是注冊(cè)到服務(wù)注冊(cè)中心的蚂踊。
在Spring Cloud微服務(wù)系統(tǒng)中约谈,一種常見的負(fù)載均衡方式是,客戶端的請(qǐng)求首先經(jīng)過負(fù)載均衡(zuul犁钟、Ngnix)棱诱,再到達(dá)服務(wù)網(wǎng)關(guān)(zuul集群),然后再到具體的服涝动。迈勋,服務(wù)統(tǒng)一注冊(cè)到高可用的服務(wù)注冊(cè)中心集群,服務(wù)的所有的配置文件由配置服務(wù)管理(下一篇文章講述)醋粟,配置服務(wù)的配置文件放在git倉庫靡菇,方便開發(fā)人員隨時(shí)改配置。
一米愿、Zuul簡介
Zuul的主要功能是路由轉(zhuǎn)發(fā)和過濾器厦凤。路由功能是微服務(wù)的一部分,比如/api/user轉(zhuǎn)發(fā)到到user服務(wù)育苟,/api/shop轉(zhuǎn)發(fā)到到shop服務(wù)泳唠。zuul默認(rèn)和Ribbon結(jié)合實(shí)現(xiàn)了負(fù)載均衡的功能。
zuul有以下功能:
Authentication
Insights
Stress Testing
Canary Testing
Dynamic Routing
Service Migration
Load Shedding
Security
Static Response handling
Active/Active traffic management
二宙搬、準(zhǔn)備工作
繼續(xù)使用上一節(jié)的工程笨腥。在原有的工程上拓哺,創(chuàng)建一個(gè)新的工程。
在其入口applicaton類加上注解@EnableZuulProxy士鸥,開啟zuul的功能:
加上配置文件application.yml加上以下的配置代碼:
首先指定服務(wù)注冊(cè)中心的地址為http://localhost:8080/eureka/,服務(wù)的端口為8082谆级,服務(wù)名為service-zuul烤礁;以/api-a/ 開頭的請(qǐng)求都轉(zhuǎn)發(fā)給service-ribbon服務(wù);以/api-b/開頭的請(qǐng)求都轉(zhuǎn)發(fā)給service-feign服務(wù)肥照;
依次運(yùn)行這五個(gè)工程;打開瀏覽器訪問:http://localhost:8082/api-a/hi?name=forezp?;瀏覽器顯示:
hi forezp,i am from port:8762
這說明zuul起到了路由的作用
四脚仔、服務(wù)過濾
zuul不僅只是路由,并且還能過濾舆绎,做一些安全驗(yàn)證鲤脏。繼續(xù)改造工程;
filterType:返回一個(gè)字符串代表過濾器的類型吕朵,在zuul中定義了四種不同生命周期的過濾器類型猎醇,具體如下:
pre:路由之前
routing:路由之時(shí)
post: 路由之后
error:發(fā)送錯(cuò)誤調(diào)用
filterOrder:過濾的順序
shouldFilter:這里可以寫邏輯判斷,是否要過濾努溃,本文true,永遠(yuǎn)過濾硫嘶。
run:過濾器的具體邏輯∥嗨埃可用很復(fù)雜沦疾,包括查sql,nosql去判斷該請(qǐng)求到底有沒有權(quán)限訪問第队。
這時(shí)訪問:http://localhost:8769/api-a/hi?name=forezp 曹鸠;網(wǎng)頁顯示:
token is empty
訪問 http://localhost:8769/api-a/hi?name=forezp&token=22 ;
網(wǎng)頁顯示:
hi forezp,i am from port:8762