【轉發(fā)】zuul的各種配置詳解

原文地址:https://www.iteye.com/blog/huan1993-2424676

我們知道我們前臺要展示數(shù)據(jù)給用戶看构订,這中間可能涉及到從后端的多個微服務進行獲取數(shù)據(jù)澎嚣。比如獲取用戶信息需要用到用戶微服務掐隐、獲取商品信息需要獲取商品微服務蓄喇、創(chuàng)建訂單需要調用訂單微服務殊橙,而各個微服務可能分布在各個機器上何暮,前端要獲取到數(shù)據(jù)就必須要知道各個微服務的地址裤园,這給前端增加開發(fā)的復雜性彼乌。一段后端的某個微服務地址改變了泻肯,前端可能還要修改。而且后端各個微服務權限認證也不好認證慰照,那么有沒有一種好的解決辦法呢灶挟?服務網(wǎng)關就正好可以解決這個問題,在 spring cloud 中使用的就是zuul來實現(xiàn)服務網(wǎng)關毒租。我們來看一下有了服務網(wǎng)關后稚铣,前端程序調用后端服務。

由上可知墅垮,當存在服務網(wǎng)關惕医,前端程序通過服務網(wǎng)關調用后臺服務,同時我們也可以在網(wǎng)關層進行各種操作算色,比如限流抬伺、權限校驗等。

實現(xiàn)功能

1灾梦、查看 zuul 中配置好的路由和過濾器信息
2峡钓、忽略所有微服務或某些微服務
3妓笙、忽略所有為服務,只路由指定的微服務
4能岩、通過path和url訪問到具體的某臺機器上
5寞宫、脫離eureka進行訪問,并使之具有負載均衡和隔離的機制等
6捧灰、轉發(fā)前是否去掉路由前綴
7淆九、為所有路由都增加一個通過的前綴
8、忽略某些路徑不進行路由
9毛俏、敏感頭的傳遞(比如Cookie等)全局設置和某個微服務設置
10炭庙、忽略頭
11、spring security 在classpath 下會忽略的頭
12煌寇、本地調換和路由的優(yōu)先級
13焕蹄、配置網(wǎng)關超時
14、重寫 Location 頭
15阀溶、文件上傳處理

代碼結構

eureka-server  
    |- 服務注冊中心  
    zuul  
        product-provider-8202  
        product-provider-8203  
            |- 服務提供者  
        product-consumer-8201  
            |- 服務消費者  
        product-gateway-8204  
            |- 網(wǎng)關程序腻脏,演示網(wǎng)關路由的各種配置  

代碼編寫

一、服務提供者银锻、服務消費者永品、注冊中心,沒有什么需要特別注意的击纬,略鼎姐。

二、服務網(wǎng)關的編寫

   1更振、創(chuàng)建網(wǎng)關工程
   2炕桨、引入 zuul 的依賴
   3、啟動類上增加 @EnableZuulProxy 注解
   4肯腕、yml 文件上注冊到 eureka 上

三献宫、eureka服務啟動界面

功能實現(xiàn)

1、查看 zuul 中配置好的路由和過濾器信息

當我們啟動了zuul 的網(wǎng)關之后实撒,想知道當前zuul代理了那些路由姊途,訪問的路徑又是那些或者我們自己寫了一個zuul的filter,想知道它當前位于zuul的filter的那個位置時知态,該如何查詢捷兰。

   **訪問路徑:** http://網(wǎng)關地址:端口/routes  訪問路由的簡單信息
                 http://網(wǎng)關地址:端口/routes?format=details  訪問路由的詳細信息
                 http://網(wǎng)關地址:端口/filters 訪問zuul中使用了那些過濾器。


   **yml文件配置:**

Yml代碼::

management:  
  security:  
    enabled: false  # 默認值是 true, 為true的話那么頁面上可能會報沒有權限訪問  

不進行配置肴甸,訪問上面的2個端點會報沒有權限訪問寂殉。

2囚巴、忽略所有微服務或某些微服務

默認情況下原在,只要引入了zuul后友扰,就會自動一個默認的路由配置,但有些時候我們可能不想要默認的路由配置規(guī)則庶柿,想自己進行定義

    **忽略所有微服務:(后面寫 * )**
zuul:  
  ignored-services: product-provider,product-consumer-8201 

忽略某些微服務:(直接寫微服務的名字=>可以理解為spring.application.name的值村怪,多個以都好分隔)

zuul:  
  ignored-services: product-provider,product-consumer-8201 

3、忽略所有為服務浮庐,只路由指定的微服務

訪問: http://gatewayhost:port/product/selectOne ===> 轉發(fā)到 product-provider上的selectOne

四甚负、通過path和url訪問到具體的某臺機器上

有時候我們測試的時候需要訪問到具體的某臺機器上,而不希望負載均衡到別的機器上或者需要訪問到第三方的某臺機器上审残。

zuul:  
  routes:  
    product-provider:  
      path: /product/**  
      url: http://localhost:8202/  

注意:
1梭域、product-provider 這個值可以隨便寫,即使是一個不存在的值
2搅轿、這種方式訪問不會作為 HystrixCommand 來進行訪問病涨。
3、url 里面也不可以寫多個url

五璧坟、脫離eureka進行訪問既穆,并使之具有負載均衡和隔離的機制等

運行結果:

六、轉發(fā)前是否去掉路由前綴

七雀鹃、為所有路由都增加一個通過的前綴

有些時候我們系統(tǒng)所有的路由都有一個統(tǒng)一的前綴進行訪問幻工,此時就可以使用 zuul.prefix 進行統(tǒng)一添加。

八黎茎、忽略某些路徑不進行路由

有些時候囊颅,我們某些微服務的某些地址不希望被第三方客戶調用到,需要被隱藏起來工三,此時就可以使用網(wǎng)關路由這些url不進行路由迁酸。

zuul:  
  ignored-patterns: /**/selectOne/**  
  routes:  
    product-provider: /product/**  

注意: 這個忽略是全局忽略,即對所有的微服務都進行忽略

九俭正、敏感頭的傳遞(比如Cookie等)全局設置和某個微服務設置

有些時候我們微服務上游可能想傳遞一些請求頭到下游的服務奸鬓,比如Token、Cookie等值掸读,默認情況下串远,zuul 不會將 Cookie,Set-Cookie,Authorization這三個頭傳遞到下游服務,如果需要傳遞儿惫,就需要忽略這些敏感頭澡罚。

全局和局部設置敏感頭:

運行結果:


注意:

1、可以看到訪問 product 路由時肾请,是可以獲取到 敏感頭中 cookie 的信息的留搔,訪問 consumer 路由無法獲取到。
2铛铁、如果下游服務啟用了hystrix隔显,那么 RequestInterceptor 要想從 ThreadLocal 中獲取request的值却妨,需要將隔離策略修改成信號量。

十括眠、忽略頭 (鏈接

有些時候彪标,我們不想將某個頭傳遞到其它所有的微服務中,就可以使用忽略頭掷豺,忽略頭是全局配置的捞烟,如果想在某個服務中忽略某個頭,可以使用敏感頭忽略当船。

zuul:  
  routes:  
    product-provider:  
      path: /product/**  
      serviceId : product-provider  
  ignored-headers: token  # 全局忽略頭题画,忽略 token 這個請求頭,不向下游服務傳遞這個token請求頭  

zuul.ignored-headers: token** 表示被zuul路由的服務都不會傳遞 token 這個請求頭德频。

十一婴程、spring security 在classpath 下會忽略的頭

當我們的 spring security 在classpath中,zuul 會為我們增加一個默認的 spring security 相關的忽略頭抱婉,如果我們不想要忽略档叔,將 zuul. ignore-security-headers: false 就可以了。

# spring security 在classpath 下會忽略的頭  
zuul:  
  routes:  
    product-provider:  
      path: /product/**  
      serviceId : product-provider  
  ignore-security-headers: false  # 為true會忽略spring security安全頭蒸绩,如果下游需要用到需要設置成false  

十二衙四、本地調換和路由的優(yōu)先級

有些時候,我們頁面上訪問到的某些路徑患亿,想讓網(wǎng)關直接進行處理传蹈,而不是直接轉發(fā)到后端的服務上,此時就可以使用到路由的跳轉步藕。 有些時候 ** /product/ext/**** 想路由product-provider-ext 服務上惦界,

/product/**** 想路由product-provider 服務上,此時在 yml 文件中順序配置**即可咙冗。

十三沾歪、配置網(wǎng)關超時

如果是通過 url 進行配置的,那么需要設置下面這個超時時間

十四雾消、重寫 Location 頭

如果Zuul面向Web應用程序灾搏,那么當Web應用程序通過http狀態(tài)代碼3XX重定向時,可能需要重寫Location頭立润,否則瀏覽器將最終重定向到Web應用程序的url而不是Zuul url狂窑。


十五、文件上傳處理

在微服務中桑腮,有時候我們經(jīng)常需要用到文件的上傳泉哈,當使用了服務網(wǎng)關 zuul 后,對于小的文件是可以上傳成功的,那么對于大的文件就會報錯丛晦,此處應該如何處理呢巨缘?

對于大文件的上傳,我們需要繞過 Spring 的 DispatcherServlet采呐。在 spring cloud zuul 中我們只需要在路由的前面加上 /zuul( zuul.servletPath) 前綴即可。

從上圖中可以看到搁骑,對于大文件的上傳斧吐,是加上了 /zuul 的前綴的。

完整代碼

服務網(wǎng)關配置代碼: https://gitee.com/huan1993/spring-cloud-parent/tree/master/zuul

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末仲器,一起剝皮案震驚了整個濱河市煤率,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌乏冀,老刑警劉巖蝶糯,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異辆沦,居然都是意外死亡昼捍,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門肢扯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來妒茬,“玉大人,你說我怎么就攤上這事蔚晨≌ё辏” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵铭腕,是天一觀的道長银择。 經(jīng)常有香客問我,道長累舷,這世上最難降的妖魔是什么浩考? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮被盈,結果婚禮上怀挠,老公的妹妹穿的比我還像新娘。我一直安慰自己害捕,他們只是感情好绿淋,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著尝盼,像睡著了一般吞滞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天裁赠,我揣著相機與錄音殿漠,去河邊找鬼。 笑死佩捞,一個胖子當著我的面吹牛绞幌,可吹牛的內容都是我干的。 我是一名探鬼主播一忱,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼莲蜘,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了帘营?” 一聲冷哼從身側響起票渠,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎芬迄,沒想到半個月后问顷,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡禀梳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年杜窄,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片算途。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡羞芍,死狀恐怖,靈堂內的尸體忽然破棺而出郊艘,到底是詐尸還是另有隱情荷科,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布纱注,位于F島的核電站畏浆,受9級特大地震影響,放射性物質發(fā)生泄漏狞贱。R本人自食惡果不足惜刻获,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望瞎嬉。 院中可真熱鬧蝎毡,春花似錦、人聲如沸氧枣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽便监。三九已至扎谎,卻和暖如春碳想,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背毁靶。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工胧奔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人预吆。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓龙填,卻偏偏與公主長得像,于是被迫代替她去往敵國和親拐叉。 傳聞我的和親對象是個殘疾皇子岩遗,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內容