1. 程式人生 > >Spring Cloud之Zuul(三):路由配置詳解

Spring Cloud之Zuul(三):路由配置詳解

主題

路由配置詳解

前言

現實中可能只想讓Zuul代理部分微服務,又或者需要對URL進行更加精確的控制。Zuul的路由配置非常靈活、簡單,本部落格通過幾個例項,詳細講解Zuul的路由配置。

內容

1.自定義指定微服務的訪問路徑

說明:配置zuul.routes.指定微服務的serverId = 指定路徑即可。例如:

作用:cloud-register-user微服務會被對映到:/user/**路徑。

zuul:
 routes: 
   cloud-register-user: /user/**

2.忽略指定微服務

說明:使用zuul.ignored-services配置需要忽略的服務,多個用逗號分隔。

作用:Zuul忽略cloud-register-user和cloud-register-consumer-ribbon微服務,只代理其它微服務。

zuul:
 ignored-services: cloud-register-user,cloud-register-consumer-ribbon

3.忽略所有微服務,只路由指定微服務

說明:將zuul.ignored-services設為'*',routes配置指定的微服務。

作用:忽略所有微服務,只代理cloud-register-user微服務。

zuul:
 ignored-services: '*'
 routes:
   cloud-register-user: /user/**

4.同時指定微服務的serviceId和對應的路徑

作用:效果與例1一致。

zuul:
 routes:
   user-route: user  # user-route只是給路由一個名稱,可以隨便命名
     service-id: cloud-register-user
     path: /user/**  # service-id對應的路徑

5.同時指定path和URL

說明:這樣就可以將/user/**對映到http://localhost:8080/**,需要注意的是改該方式不會作為HystrixCommand執行,同時不支援Ribbon負載均衡。

作用:當訪問http://localhost:8023/user/1時,則會轉發至http://localhost:8080/1

zuul:
 routes:
   user-route: user # user-route只是給路由一個名稱,可以隨便命名
    url: http://localhost:8080/ #指定URL
    path: /user/**   # URL對應的路徑

6.同時指定path和URL,並且不破壞Hystrix、Ribbon特性

說明:這樣就可以指定path和URL,並且不破壞Hystrix、Ribbon特性

zuul:
 routes:
   user-route:
    path: /user/**
    service-id: cloud-register-user
ribbon:
 eureka:
   enabled: false  # 為Ribbon禁用Eureka
cloud-register-user: # 這邊是serviceId
 ribbon:
   listOfServers: http://localhost:8080,http://localhost:8081

7.使用正則表示式指定Zuul的路由匹配規則

說明:藉助PatternServiceRouteMapper,實現從微服務到對映路由的正則配置。

作用:下面將如cloud-register-user-v2這個微服務,對映到/v1/cloud-register-user/**這個路徑上

如:對微服務的serviceId命名為cloud-register-user-v1,那麼我們可以這麼來訪問http://localhost:8023/v1/cloud-register-user/1

8.路由字首

全域性時:

說明:設定 zuul.prefix 可以為所有的匹配增加字首, 例如 /api,代理字首預設會從請求路徑中移除(通過zuul.stripPrefix=false可以關閉這個功能),zuul.stripPrefix預設為true。

作用:當strip-prefix=true的時候 (http://localhost:8023/api/cloud-register-user

/1 -> http://localhost:8002/1)  

當strip-prefix=false的時候(http://localhost:5016/api/cloud-register-user
/1 -> http://localhost:8002/api/1) 

區域性時:

說明:下面面為true的配置,當訪問zuul的/user/1路徑,請求將會被轉發到cloud-register-user微服務的/1路徑

作用:當strip-prefix=true的時候 (http://localhost:8023/user/1-> http://localhost:8002/1)  

當strip-prefix=false的時候(http://localhost:8023/user/1 -> http://localhost:8002/user/1)

如:配置全域性的,與prefix一起使用

zuul:
  prefix: /api
  strip-prefix: true



如:配置區域性的,與path一起使用

zuul:
  routes:
    provide-user: 
      path: /user/**
      strip-prefix: false

9.忽略某些路徑

說明:2中有講有忽略微服務,但是有時需要更細粒度的路由控制。如,想讓Zuul代理某個微服務,同時又想保護該微服務的某些敏感路徑。此時,可使用ignored-patterns指定忽略的正則

作用:這樣就可以將cloud-register-user微服務對映到/user/**路徑,但會忽略該微服務中所有包含/admin的路徑。

zuul:
 ignored-patterns: /**/admin/**  # 忽略所有包含/admin/的路徑
 routes:
   cloud-register-user: /user/**

10.本地轉發

作用:但訪問Zuul的 /path-a/**路徑,將轉發到Zuul的path-b/**,其它遺留路徑將轉發到 path-c/**

zuul:
 routes:
   route-name:
     path: /path-a/**
     url: forward:/path-b
   legacy:
     path: /**
     url: path-c

11.other

如果無法掌握Zuul路由規則,可配如下日誌

logging:
 level: 
   com.netflix: DEBUG

原始碼獲取

1.gitee:https://gitee.com/StarskyBoy/cloud

2.github: https://github.com/StarskyBoy/cloud

獲取更多資訊,請掃我