Spring Cloud 之服務網(wǎng)關(guān)

服務網(wǎng)關(guān)(API GATEWAY)

服務網(wǎng)關(guān)是微服務架構(gòu)中一個不可或缺的部分。通過服務網(wǎng)關(guān)統(tǒng)一向外系統(tǒng)提供REST API的過程中歹叮,除了具備服務路由寓涨、均衡負載功能之外澎蛛,它還具備了權(quán)限控制等功能。

1. 引入依賴spring-cloud-starter-zuul躏鱼、spring-cloud-starter-eureka

2. 啟動類使用@EnableZuulProxy注解氮采,開啟Zuul

3. 這里用了@SpringCloudApplication注解,之前沒有提過染苛,通過源碼我們看到鹊漠,它整合了@SpringBootApplication、@EnableEurekaClient茶行、@EnableCircuitBreaker

4. 配置yml文件:

spring.application.name=api-gateway

server.port=50001

服務路由

通過服務路由的功能躯概,我們在對外提供服務的時候,只需要通過暴露Zuul中配置的調(diào)用地址就可以讓調(diào)用方統(tǒng)一的來訪問我們的服務畔师,而不需要了解具體提供服務的主機信息了娶靡。

在Zuul中提供了兩種映射方式:

1. 通過url直接映射,例如yml配置:

zuul.routes.api-a-url.path=/api-a-url/**

zuul.routes.api-a-url.url=http://localhost:18443/

說明: 其中看锉,配置屬性zuul.routes.api-a-url.path中的api-a-url部分為路由的名字固蛾,可以任意定義,但是一組映射關(guān)系的path和url要相同度陆,下面講serviceId時候也是如此。

2. 通過serviceId的映射献幔,例如yml配置:

zuul.routes.api-a.path=/api-a/**

zuul.routes.api-a.serviceId=service-A

zuul.routes.api-b.path=/api-b/**

zuul.routes.api-b.serviceId=service-B

eureka.client.serviceUrl.defaultZone=http://localhost:10001/eureka/

推薦使用serviceId的映射方式懂傀,除了對Zuul維護上更加友好之外,serviceId映射方式還支持了斷路器蜡感,對于服務故障的情況下蹬蚁,可以有效的防止故障蔓延到服務網(wǎng)關(guān)上而影響整個系統(tǒng)的對外服務

權(quán)限驗證

1. 使用過濾器

服務網(wǎng)關(guān)中定義過濾器只需要繼承ZuulFilter抽象類實現(xiàn)其定義的四個抽象函數(shù)就可對請求進行攔截與過濾。

filterType:返回一個字符串代表過濾器的類型郑兴,在zuul中定義了四種不同生命周期的過濾器類型犀斋,具體如下:

pre:可以在請求被路由之前調(diào)用

routing:在路由請求時候被調(diào)用

post:在routing和error過濾器之后被調(diào)用

error:處理請求時發(fā)生錯誤時被調(diào)用

filterOrder:通過int值來定義過濾器的執(zhí)行順序

shouldFilter:返回一個boolean類型來判斷該過濾器是否要執(zhí)行,所以通過此函數(shù)可實現(xiàn)過濾器的開關(guān)情连。在上例中叽粹,我們直接返回true,所以該過濾器總是生效却舀。

run:過濾器的具體邏輯虫几。需要注意,這里我們通過ctx.setSendZuulResponse(false)令zuul過濾該請求挽拔,不對其進行路由辆脸,然后通過ctx.setResponseStatusCode(401)設置了其返回的錯誤碼,當然我們也可以進一步優(yōu)化我們的返回螃诅,比如啡氢,通過ctx.setResponseBody(body)對返回body內(nèi)容進行編輯等状囱。

2. 使用攔截器

在攔截器中進行鑒權(quán)判斷

實例源碼: api-gateway

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市倘是,隨后出現(xiàn)的幾起案子亭枷,更是在濱河造成了極大的恐慌,老刑警劉巖辨绊,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奶栖,死亡現(xiàn)場離奇詭異,居然都是意外死亡门坷,警方通過查閱死者的電腦和手機宣鄙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來默蚌,“玉大人冻晤,你說我怎么就攤上這事〕裎” “怎么了鼻弧?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長锦茁。 經(jīng)常有香客問我攘轩,道長,這世上最難降的妖魔是什么码俩? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任度帮,我火速辦了婚禮,結(jié)果婚禮上稿存,老公的妹妹穿的比我還像新娘笨篷。我一直安慰自己,他們只是感情好瓣履,可當我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布率翅。 她就那樣靜靜地躺著,像睡著了一般袖迎。 火紅的嫁衣襯著肌膚如雪冕臭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天燕锥,我揣著相機與錄音浴韭,去河邊找鬼。 笑死脯宿,一個胖子當著我的面吹牛念颈,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播连霉,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼榴芳,長吁一口氣:“原來是場噩夢啊……” “哼嗡靡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起窟感,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤讨彼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后柿祈,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哈误,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年躏嚎,在試婚紗的時候發(fā)現(xiàn)自己被綠了蜜自。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡卢佣,死狀恐怖重荠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情虚茶,我是刑警寧澤戈鲁,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站嘹叫,受9級特大地震影響婆殿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜罩扇,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一婆芦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧暮蹂,春花似錦、人聲如沸癌压。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽滩届。三九已至集侯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間帜消,已是汗流浹背棠枉。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留泡挺,地道東北人辈讶。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像娄猫,于是被迫代替她去往敵國和親贱除。 傳聞我的和親對象是個殘疾皇子生闲,可洞房花燭夜當晚...
    茶點故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內(nèi)容