最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Spring Cloud Zuul中路由配置細(xì)節(jié)

 更新時間:2017年10月31日 09:35:20   作者:_江南一點雨  
本篇文章主要介紹了詳解Spring Cloud Zuul中路由配置細(xì)節(jié),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

上篇文章我們介紹了API網(wǎng)關(guān)的基本構(gòu)建方式以及請求過濾,小伙伴們對Zuul的作用應(yīng)該已經(jīng)有了一個基本的認(rèn)識,但是對于路由的配置我們只是做了一個簡單的介紹,本文我們就來看看路由配置的其他一些細(xì)節(jié)。

首先我們來回憶一下上篇文章我們配置路由規(guī)則的那兩行代碼:

zuul.routes.api-a.path=/api-a/**
zuul.routes.api-a.serviceId=feign-consumer

我們說當(dāng)我的訪問地址符合/api-a/**規(guī)則的時候,會被自動定位到feign-consumer服務(wù)上去,不過兩行代碼有點麻煩,我們可以用下面一行代碼來代替,如下:

zuul.routes.feign-consumer=/api-a/**

zuul.routes后面跟著的是服務(wù)名,服務(wù)名后面跟著的是路徑規(guī)則,這種配置方式顯然更簡單。

如果映射規(guī)則我們什么都不寫,系統(tǒng)也給我們提供了一套默認(rèn)的配置規(guī)則,默認(rèn)的配置規(guī)則如下:

zuul.routes.feign-consumer.path=/feign-consumer/**
zuul.routes.feign-consumer.serviceId=feign-consumer

默認(rèn)情況下,Eureka上所有注冊的服務(wù)都會被Zuul創(chuàng)建映射關(guān)系來進(jìn)行路由,但是對于我這里的例子來說,我希望提供服務(wù)的是feign-consumer,hello-service作為服務(wù)提供者只對服務(wù)消費者提供服務(wù),不對外提供服務(wù),如果使用默認(rèn)的路由規(guī)則,則Zuul也會自動為hello-service創(chuàng)建映射規(guī)則,這個時候我們可以采用如下方式來讓Zuul跳過hello-service服務(wù),不為其創(chuàng)建路由規(guī)則:

zuul.ignored-services=hello-service

有的小伙伴可能為有疑問,我們定義路由規(guī)則/api-a/**的時候,為什么最后面是兩個*,一個可不可以呢?當(dāng)然可以,不過意義可就不一樣了,Zuul中的路由匹配規(guī)則使用了Ant風(fēng)格定義,一共有三種不同的通配符:

通配符 含義 舉例 解釋
? 匹配任意單個字符 /feign-consumer/? 匹配/feign-consumer/a,/feign-consumer/b,/feign-consumer/c等
* 匹配任意數(shù)量的字符 /feign-consumer/* 匹配/feign-consumer/aaa,feign-consumer/bbb,/feign-consumer/ccc等,無法匹配/feign-consumer/a/b/c
** 匹配任意數(shù)量的字符 /feign-consumer/* 匹配/feign-consumer/aaa,feign-consumer/bbb,/feign-consumer/ccc等,也可以匹配/feign-consumer/a/b/c

有的時候我們還會遇到這樣一個問題,比如我有兩個服務(wù),一個叫做feign-consumer,還有一個叫做feign-consumer-hello,此時我的路由配置規(guī)則可能這樣來寫:

zuul.routes.feign-consumer.path=/feign-consumer/**
zuul.routes.feign-consumer.serviceId=feign-consumer

zuul.routes.feign-consumer-hello.path=/feign-consumer/hello/**
zuul.routes.feign-consumer-hello.serviceId=feign-consumer-hello

此時我訪問feign-consumer-hello的路徑會同時被這兩條規(guī)則所匹配,Zuul中的路徑匹配方式是一種線性匹配方式,即按照路由匹配規(guī)則的存儲順序依次匹配,因此我們只需要確保feign-consumer-hello的匹配規(guī)則被先定義feign-consumer的匹配規(guī)則被后定義即可,但是在properties文件中我們不能保證這個先后順序,此時我們需要用YAML來配置,這個時候我們可以刪掉resources文件夾下的application.properties,然后新建一個application.yml,內(nèi)容如下:

spring:
 application:
  name: api-gateway
server:
 port: 2006
zuul:
 routes:
  feign-consumer-hello:
   path: /feign-consumer/hello/**
   serviceId: feign-consumer-hello
  feign-consumer:
   path: /feign-consumer/**
   serviceId: feign-consumer
eureka:
 client:
  service-url:
   defaultZone: http://localhost:1111/eureka/

這個時候我們就可以確保先加載feign-consumer-hello的匹配規(guī)則,后加載feign-consumer的匹配規(guī)則。

上文我們說了一個zuul.ignored-services=hello-service屬性可以忽略掉一個服務(wù),不給某個服務(wù)設(shè)置映射規(guī)則,這個配置我們可以進(jìn)一步細(xì)化,比如說我不想給/hello接口路由,那我們可以按如下方式配置(后面我都用yaml配置):

zuul:
 ignored-patterns: /**/hello/**

此時訪問/hello接口就會報404錯誤,同時我們也可以看到后臺打印如下日志:

此外,我們也可以統(tǒng)一的為路由規(guī)則增加前綴,設(shè)置方式如下:

zuul:
 prefix: /myapi

此時我們的訪問路徑就變成了http://localhost:2006/myapi/feign-consumer/hello1。

一般情況下API網(wǎng)關(guān)只是作為系統(tǒng)的統(tǒng)一入口,但是有的時候我們可能也需要在API網(wǎng)關(guān)上做一點業(yè)務(wù)邏輯操作,比如我現(xiàn)在在api-gateway項目中新建如下Controller:

@RestController
public class HelloController {
  @RequestMapping("/local")
  public String hello() {
    return "hello api gateway";
  }
}

我希望用戶在訪問/local時能夠自動跳轉(zhuǎn)到這個方法上來處理,那么此時我們需要用到Zuul的本地跳轉(zhuǎn),配置方式如下:

zuul:
 prefix: /myapi
 ignored-patterns: /**/hello/**
 routes:
  local:
   path: /local/**
   url: forward:/local

此時訪問http://localhost:2006/myapi/local結(jié)果如下:

我們在使用Nginx的時候,會涉及到一個請求頭信息的配置,防止頁面重定向后跳轉(zhuǎn)到上游服務(wù)器上去,這個問題在Zuul中一樣存在,假設(shè)我的feign-consumer中提供了一個接口/hello4,當(dāng)訪問/hello4接口的時候,頁面重定向到/hello,默認(rèn)情況下,重定向的地址是具體的服務(wù)實例的地址,而不是API網(wǎng)關(guān)的跳轉(zhuǎn)地址,這種做法會暴露真實的服務(wù)地址,所以需要在Zuul中配置,配置方式很簡單,如下:

zuul:
 add-host-header: true

表示API網(wǎng)關(guān)在進(jìn)行請求路由轉(zhuǎn)發(fā)前為請求設(shè)置Host頭信息。

默認(rèn)情況下,敏感的頭信息無法經(jīng)過API網(wǎng)關(guān)進(jìn)行傳遞,我們可以通過如下配置使之可以傳遞:

zuul:
 routes:
  feign-consumer:
   sensitiveHeaders:

在Zuul中,Ribbon和Hystrix的配置還是和之前的配置方式一致,這里我就不贅述了,如果我們想關(guān)閉Hystrix重試機制,可以通過如下方式:

關(guān)閉全局重試機制:

zuul:
 retryable: false

關(guān)閉某一個服務(wù)的重試機制:

zuul:
 routes:
  feign-consumer:
   retryable: false

關(guān)于Zuul中路由的配置細(xì)節(jié)我們就說到這里,有問題歡迎討論。以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java 實現(xiàn)聲音播放程序

    Java 實現(xiàn)聲音播放程序

    這篇文章主要介紹了Java 實現(xiàn)聲音播放程序的示例代碼,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-12-12
  • 自己動手寫的mybatis分頁插件(極其簡單好用)

    自己動手寫的mybatis分頁插件(極其簡單好用)

    最近做了個項目,需要用到mybatis分頁功能,網(wǎng)上找了很多插件,都不太合適,于是就自己動手寫了個mybatis分頁插件功能,非常不錯,代碼簡單易懂,需要的朋友參考下吧
    2016-11-11
  • Spring?Security使用數(shù)據(jù)庫登錄認(rèn)證授權(quán)

    Spring?Security使用數(shù)據(jù)庫登錄認(rèn)證授權(quán)

    本文主要介紹了Spring?Security使用數(shù)據(jù)庫登錄認(rèn)證授權(quán),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • mybatis?報錯顯示sql中有兩個limit的解決

    mybatis?報錯顯示sql中有兩個limit的解決

    這篇文章主要介紹了mybatis?報錯顯示sql中有兩個limit的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • maven導(dǎo)入本地jar包的三種方式

    maven導(dǎo)入本地jar包的三種方式

    本文主要介紹了maven導(dǎo)入本地jar包的三種方式,?文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-04-04
  • Nacos的單機模式啟動失敗問題及解決

    Nacos的單機模式啟動失敗問題及解決

    這篇文章主要介紹了Nacos的單機模式啟動失敗問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • java關(guān)鍵字final使用方法詳解

    java關(guān)鍵字final使用方法詳解

    在程序設(shè)計中,我們有時可能希望某些數(shù)據(jù)是不能夠改變的,這個時候final就有用武之地了。final是java的關(guān)鍵字,本文就詳細(xì)說明一下他的使用方法
    2013-11-11
  • servlet監(jiān)聽器的學(xué)習(xí)使用(三)

    servlet監(jiān)聽器的學(xué)習(xí)使用(三)

    這篇文章主要為大家詳細(xì)介紹了servlet監(jiān)聽器學(xué)習(xí)使用的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • Java同步代碼塊解決銀行取錢的安全問題實例分析

    Java同步代碼塊解決銀行取錢的安全問題實例分析

    這篇文章主要介紹了Java同步代碼塊解決銀行取錢的安全問題,結(jié)合實例形式分析了java基于線程的同步問題實現(xiàn)與使用相關(guān)操作技巧,需要的朋友可以參考下
    2019-08-08
  • 利用Spring插件實現(xiàn)策略模式的案例詳解

    利用Spring插件實現(xiàn)策略模式的案例詳解

    Spring插件提供了一種更實用的插件開發(fā)方法,它提供了插件實現(xiàn)擴展核心系統(tǒng)功能的核心靈活性,但當(dāng)然不提供核心OSGi功能,如動態(tài)類加載或運行時安裝和部署插件,本文就來聊下如何使用spring插件來實現(xiàn)策略模式,需要的朋友可以參考下
    2023-05-05

最新評論

阳西县| 县级市| 琼结县| 石首市| 大港区| 昭通市| 北宁市| 绍兴县| 海南省| 靖安县| 孝昌县| 石泉县| 皋兰县| 平遥县| 辉南县| 大厂| 宿州市| 文昌市| 广宁县| 桓台县| 塔河县| 葫芦岛市| 古浪县| 子长县| 尖扎县| 红河县| 长治市| 礼泉县| 乐业县| 张家界市| 金坛市| 老河口市| 崇阳县| 新丰县| 樟树市| 延庆县| 罗平县| 上虞市| 甘肃省| 和田市| 栖霞市|