91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring Cloud Zuul中路由配置的示例分析

發布時間:2021-08-20 12:20:17 來源:億速云 閱讀:134 作者:小新 欄目:編程語言

這篇文章將為大家詳細講解有關Spring Cloud Zuul中路由配置的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

首先我們來回憶一下配置路由規則的那兩行代碼:

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

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

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

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

如果映射規則我們什么都不寫,系統也給我們提供了一套默認的配置規則,默認的配置規則如下:

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

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

zuul.ignored-services=hello-service

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

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

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

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

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的匹配規則,后加載feign-consumer的匹配規則。

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

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

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

Spring Cloud Zuul中路由配置的示例分析

此外,我們也可以統一的為路由規則增加前綴,設置方式如下:

zuul:
 prefix: /myapi

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

一般情況下API網關只是作為系統的統一入口,但是有的時候我們可能也需要在API網關上做一點業務邏輯操作,比如我現在在api-gateway項目中新建如下Controller:

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

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

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

此時訪問http://localhost:2006/myapi/local結果如下:

Spring Cloud Zuul中路由配置的示例分析

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

zuul:
 add-host-header: true

表示API網關在進行請求路由轉發前為請求設置Host頭信息。

默認情況下,敏感的頭信息無法經過API網關進行傳遞,我們可以通過如下配置使之可以傳遞:

zuul:
 routes:
  feign-consumer:
   sensitiveHeaders:

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

關閉全局重試機制:

zuul:
 retryable: false

關閉某一個服務的重試機制:

zuul:
 routes:
  feign-consumer:
   retryable: false

關于“Spring Cloud Zuul中路由配置的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

大姚县| 华坪县| 深水埗区| 沽源县| 响水县| 平乡县| 金昌市| 永平县| 新巴尔虎左旗| 咸阳市| 临猗县| 汝阳县| 行唐县| 武汉市| 新龙县| 白朗县| 长治县| 丽水市| 原阳县| 新泰市| 淮阳县| 西林县| 固始县| 涪陵区| 平南县| 沈丘县| 象山县| 万安县| 静安区| 廊坊市| 荔波县| 琼海市| 平江县| 湾仔区| 汤阴县| 南宫市| 石棉县| 长治市| 衡阳县| 平乡县| 福鼎市|