查看Zuul的路由端點和過濾器


概述

 引入的spring-cloud-starter-netflix-zuul依賴會自動的引入spring-boot-starter-actuator,所以無需重復引入application.yml配置啟用所有的監控端點

    如下配置

#actuator  啟用所有的監控端點 “*”號代表啟用所有的監控端點,可以單獨啟用,例如,health,info,metrics
#  spring boot 升為 2.0 后,為了安全,默認 Actuator 只暴露2個端點,heath 和 info
management:
  endpoints:
    web:
      exposure:
        include: "*" 
  endpoint:
      health:
        show-details: ALWAYS

啟動服務
  啟動注冊中心Eureka Server 項目 discovery-eureka
  啟動服務提供者provider-user
  啟動服務消費者consumer-movie-ribbon
  啟動zuul網關gateway-zuul
  訪問 eureka server http://localhost:8761/ 查看注冊情況

查看 Routes Endpoint

  如官方解讀,使用GET方法訪問該端點,可以查看zuul當前映射的路由列表

  使用POST方法訪問該端點就會強制刷新zuul當前映射的路由列表。

訪問zuul

http://localhost:4534/actuator/routes

  zuul默認情況下會代理所有注冊在EurekaServer上的服務

查看 Filters Endpoint

  訪問zuul

  http://localhost:4534/actuator/filters

配置

  忽略指定的微服務

  在application.yml中通過 zuul.ignored-services屬性指定忽略的微服務 ,多個服務使用,分隔

zuul:
  ignored-services: provider-user,consumer-movie-ribbon  

    自定義微服務的訪問路徑

  在application.yml中通過配置zuul.routes.微服務的ServiceId :指定路徑

zuul:
  routes: 
     microservice-provider-user: /userprovider/**

  這樣-provider-user就會被映射到/userprovider/**路徑

  測試一下:

  啟動注冊中心Eureka Server 項目discovery-eureka
  啟動服務提供者provider-user
  啟動服務消費者 consumer-movie-ribbon
  啟動zuul網關gateway-zuul

  訪問下設置的映射路徑: http://localhost:4534/userprovider/user/4

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

  如果只想讓zuul代理指定的微服務,可以將zuul.ignored-services設置為'*' ,然后再routes中設置指定的微服務

zuul:
  ignored-services: '*'
  routes: 
     provider-user: /userprovider/**

  訪問下映射后的路徑

在這里插入圖片描述

  那試試原來的地址還能訪問嗎?
  http://localhost:4534/provider-user/user/4

在這里插入圖片描述

 zuul的路由情況 http://localhost:4534/actuator/routes

在這里插入圖片描述

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

  

  效果同自定義微服務的訪問路徑 ,只不過這里用的是電影微服務

zuul:
  routes:
    movie-route:  # 該配置方式中,這個名稱是路由名稱,可自定義
      service-id: consumer-movie-ribbon
      path: /movie/**  #與service-id對應的微服務的路徑

  同時指定微服務的URL和對應路徑

zuul:
  routes:
    movie-route:  # 該配置方式中,這個名稱是路由名稱,可自定義
      url: http://localhost:7902/ # 指定的url  7902 為 該微服務的啟動端口
      path: /movie/**  #與service-id對應的微服務的路徑

  上配置可以實現將/movie/** 映射到 http://localhost:7902/**

  但是這種配置方式的路由不會作為HystrixCommand執行,同時不能使用Ribbon來負載均衡多個URL。 可以使用下面的的配置來使用Zuul的Hystrix 、Ribbon特性

  同時指定微服務的URL和對應路徑,並且不破壞Zuul的Hystrix 、Ribbon特性

  方式一:

zuul:
  routes:
    movie-route:  # 該配置方式中,這個名稱是路由名稱,可自定義
      service-id: micorservice-consumer-movie-ribbon
      path: /movie/**  #與service-id對應的微服務的路徑
      
ribbon:
  eureka:
    enabled: false # 為Ribbon禁用Eureka

micorservice-consumer-movie-ribbon:  # 上面的service-id
  ribbon:
    listOfServers: http://localhost:7901,http://localhost:7902

  使用正則表達式指定Zuul的路由匹配規則

@Bean
public PatternServiceRouteMapper serviceRouteMapper() {
    return new PatternServiceRouteMapper(
        "(?<name>^.+)-(?<version>v.+$)",
        "${version}/${name}");
}

  看下 PatternServiceRouteMapper

  構造函數兩個參數 servicePattern 和 routePattern

    servicePattern 微服務正則
    routePattern 路由正則
  上述的規則含義是 將 microservice-provider-user-v1這種微服務,映射到/v1/microservice-provider-user/**這個路徑
  設置路由前綴

zuul:
  prefix: /api
  strip-prefix: false
  routes:
    microservice-provider-user: /userprovider/**

  microservice-provider-user的控制層增加如下方法用作測試

 

  訪問 : http://localhost:4534/api/userprovider/3

  

  訪問zuul的 http://localhost:4534/api/userprovider/3 被轉發到 microservice-provider-user的 /api/{id} 方法 。

  查看zuul的路由規則 http://localhost:4534/actuator/routes
  

  示例二:

zuul:
  routes:
    microservice-provider-user:  # 微服務的serviceId
       path: /user/**
       strip-prefix: false

  訪問zuul的 /user/2 將被轉發到microservice-provider-user的/user/2

  忽略某些路徑

  如果需要更加細粒度的路由控制,比如想讓zuul代理某個服務,同時又想保護該微服務的某些敏感路徑,這個時候 ignored-patterns屬性就派上用場了。

 

zuul:
  routes:
    microservice-provider-user:  /userprovider/**
  ignored-patterns: /**/admin/**  # 忽略包含admin的路徑

 

  想看更多zuul的轉發細節,請將 com.netflix包的日志設置為debug級別。

  application.yml中增加

logging:
  level:
    com.netflix: DEBUG  # 將 com.netflix包的日志級別設置為debug

  

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM