亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

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

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

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

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

如果映射規(guī)則我們什么都不寫(xiě),系統(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上所有注冊(cè)的服務(wù)都會(huì)被Zuul創(chuàng)建映射關(guān)系來(lái)進(jìn)行路由,但是對(duì)于我這里的例子來(lái)說(shuō),我希望提供服務(wù)的是feign-consumer,hello-service作為服務(wù)提供者只對(duì)服務(wù)消費(fèi)者提供服務(wù),不對(duì)外提供服務(wù),如果使用默認(rèn)的路由規(guī)則,則Zuul也會(huì)自動(dòng)為hello-service創(chuàng)建映射規(guī)則,這個(gè)時(shí)候我們可以采用如下方式來(lái)讓Zuul跳過(guò)hello-service服務(wù),不為其創(chuàng)建路由規(guī)則:

zuul.ignored-services=hello-service

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

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

有的時(shí)候我們還會(huì)遇到這樣一個(gè)問(wèn)題,比如我有兩個(gè)服務(wù),一個(gè)叫做feign-consumer,還有一個(gè)叫做feign-consumer-hello,此時(shí)我的路由配置規(guī)則可能這樣來(lái)寫(xiě):

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

此時(shí)我訪問(wèn)feign-consumer-hello的路徑會(huì)同時(shí)被這兩條規(guī)則所匹配,Zuul中的路徑匹配方式是一種線性匹配方式,即按照路由匹配規(guī)則的存儲(chǔ)順序依次匹配,因此我們只需要確保feign-consumer-hello的匹配規(guī)則被先定義feign-consumer的匹配規(guī)則被后定義即可,但是在properties文件中我們不能保證這個(gè)先后順序,此時(shí)我們需要用YAML來(lái)配置,這個(gè)時(shí)候我們可以刪掉resources文件夾下的application.properties,然后新建一個(gè)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/

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

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

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

此時(shí)訪問(wèn)/hello接口就會(huì)報(bào)404錯(cuò)誤,同時(shí)我們也可以看到后臺(tái)打印如下日志:

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

zuul:
 prefix: /myapi

此時(shí)我們的訪問(wèn)路徑就變成了http://localhost:2006/myapi/feign-consumer/hello1。

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

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

我希望用戶(hù)在訪問(wèn)/local時(shí)能夠自動(dòng)跳轉(zhuǎn)到這個(gè)方法上來(lái)處理,那么此時(shí)我們需要用到Zuul的本地跳轉(zhuǎn),配置方式如下:

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

此時(shí)訪問(wèn)http://localhost:2006/myapi/local結(jié)果如下:

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

zuul:
 add-host-header: true

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

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

zuul:
 routes:
  feign-consumer:
   sensitiveHeaders:

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

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

zuul:
 retryable: false

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

zuul:
 routes:
  feign-consumer:
   retryable: false

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

相關(guān)文章

  • Java并發(fā)系列之Semaphore源碼分析

    Java并發(fā)系列之Semaphore源碼分析

    這篇文章主要為大家詳細(xì)介紹了Java并發(fā)系列之Semaphore源碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • IDEA 集成 Docker 插件一鍵部署 SpringBoot 應(yīng)用小結(jié)

    IDEA 集成 Docker 插件一鍵部署 SpringBoot 應(yīng)用

    通過(guò)本文介紹的方法,我們期望能幫助開(kāi)發(fā)者更輕松地在IDEA中實(shí)現(xiàn)Spring Boot應(yīng)用的Docker化部署,為現(xiàn)代軟件開(kāi)發(fā)提供更便捷的解決方案,感興趣的朋友一起看看吧
    2023-11-11
  • Spring Boot 整合mybatis 與 swagger2

    Spring Boot 整合mybatis 與 swagger2

    之前使用springMVC+spring+mybatis,總是被一些繁瑣的xml配置,還經(jīng)常出錯(cuò),下面把以前的一些ssm項(xiàng)目改成了spring boot + mybatis,相對(duì)于來(lái)說(shuō)優(yōu)點(diǎn)太明顯了,具體內(nèi)容詳情大家通過(guò)本文學(xué)習(xí)吧
    2017-08-08
  • SpringBoot使用ExceptionHandler做異常處理

    SpringBoot使用ExceptionHandler做異常處理

    這篇文章主要介紹了SpringBoot使用ExceptionHandler做異常處理,這篇文章通過(guò)多種方法案例來(lái)介紹該項(xiàng)技術(shù)的使用,需要的朋友可以參考下
    2021-06-06
  • Spring超詳細(xì)講解注解開(kāi)發(fā)

    Spring超詳細(xì)講解注解開(kāi)發(fā)

    Spring是輕代碼而重配置的框架,配置比較繁重,影響開(kāi)發(fā)效率,所以注解開(kāi)發(fā)是一種趨勢(shì)。本文將通過(guò)示例為大家詳細(xì)講講Spring如何實(shí)現(xiàn)注解開(kāi)發(fā),感興趣的可以學(xué)習(xí)一下
    2022-08-08
  • 基于Feign傳輸對(duì)象無(wú)法接收參數(shù)的問(wèn)題

    基于Feign傳輸對(duì)象無(wú)法接收參數(shù)的問(wèn)題

    這篇文章主要介紹了基于Feign傳輸對(duì)象無(wú)法接收參數(shù)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Spring jpa和mybatis整合遇到的問(wèn)題解析

    Spring jpa和mybatis整合遇到的問(wèn)題解析

    有朋友說(shuō)jpa相比mybatis太難用,多表聯(lián)合的查詢(xún)寫(xiě)起來(lái)也比較費(fèi)勁,所以便加入了mybatis的支持,在配置jpa時(shí)遇到各種問(wèn)題,需要修改相關(guān)配置文件,下面小編給大家分享下修改配置文件的思路,感興趣的朋友參考下
    2016-10-10
  • Java基于Guava Retrying實(shí)現(xiàn)重試功能

    Java基于Guava Retrying實(shí)現(xiàn)重試功能

    這篇文章主要介紹了Java基于Guava Retrying實(shí)現(xiàn)重試功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • java常用Lambda表達(dá)式使用場(chǎng)景源碼示例

    java常用Lambda表達(dá)式使用場(chǎng)景源碼示例

    這篇文章主要為大家介紹了java常用Lambda表達(dá)式使用場(chǎng)景源碼示例及應(yīng)用解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-03-03
  • java集合繼承關(guān)系圖分享

    java集合繼承關(guān)系圖分享

    這篇文章主要為大家詳細(xì)介紹了java集合繼承關(guān)系圖,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11

最新評(píng)論