天天看點

SpringCloud之Zuul路由配置

預設情況下,Zuul會代理所有注冊到Eureka Server上的微服務
Zuul的路由規則如下:
http://ZUUL_HOST:ZUUL_PORT/serviceId/**

注:即微服務在Eureka Server上的serviceId/**會被轉發達到serviceId對應的微服務
一、自定義指定微服務的通路路徑
zuul:
  routes:  #配置路由映射
    service-hi: /service/**  #比如目前是給service-hi 添加映射位址為/service/**


二、忽略指定微服務
zuul:
    ignored-services: service-hi #忽略serviceId為servie-hi的微服務

注:多個微服務使用逗号隔離

三、忽略所有微服務,隻路由指定微服務
zuul:
  ignored-services: "*"  #使用*忽略所有的微服務,隻路由指定的微服務
  routes:  #配置路由映射
    service-hi: /service/**  #比如目前是給service-hi 添加映射位址為/service/**


四、同時指定微服務的serviceId和path(對應路徑)
zuul:
    routes:
        service-test:  #在本配置模式下service-test隻是給路由起一個名字,任意起名即可
            service-id: service-hi
            path: /service/**   #service-id對應的路徑


五、同時指定path和URL
zuul:
    routes:
        service-test:  #在本配置模式下service-test隻是給路由起一個名字,可以
                任意起名即可
            url: http://localhost:8080/ #指定的url
            path: /service/**   #url對應的路徑

這樣便可以将service/** 映射到http://localhost:8080/ **
注:使用這種方式配置的路由不會作為HystrixCommand執行,同時也不能使用Ribbon來負載均衡多個URL。
六、同時指定path和URL,并且不破壞Zuul的Hystrix、Ribbon特性
zuul:
  routes:
    service-test:
      service-id: service-hi
      path: /service/**
ribbon:
  eureka:
    enabled: false #為Ribbon禁用Eureka
service-hi:
  ribbon:
    listOfServers: localhoost:8763,localhost:8765

注:這裡首先禁用eureka的ribbon,然後單獨設定Ribbon
七、使用正規表達式指定Zuul的路由比對規則
@Bean
public PatternServiceRouteMapper serviceRouteMapper(){
    //調用構造函數PatternServiceRouteMapper(String servicePattern, String routePattern)
    //servicePattern指定微服務的正則
    //routePattern指定路由正則
    return new PatternServiceRouteMapper("(?<name>^.+)-(?<version>h.+$)","${version}/${name}");
}

上面可以實作将service-hi這個微服務,映射到/hi/service/**這個路徑。

八、路由字首
zuul:
  prefix: /hi
  strip-prefix: false
  routes:
    service-hi: /service/**

這樣便可以将Zuul的/hi/service/**路徑,映射到微服務service-hi的hi/**

九、忽略某些路徑
如果我們實際需求中想讓Zuul代理某個微服務,同時又想保護戶該微服務的某些敏感路徑,可以使用ignored-patterns,指定忽略正則。
zuul:
  ignored-patterns: /**/admin/** #忽略所有包含/admin/的路徑
  routes: 
      service-hi: /service/** 

這樣既可将微服務映射到service/**路徑,但會忽略微服務中包含/admin/的路徑
           

繼續閱讀