javascript
Spring Cloud【Finchley】-16 Zuul的路由配置
文章目錄
- 概述
- 路由配置
- 1.忽略指定的微服務
- 2.自定義微服務的訪問路徑
- 3.忽略所有微服務,只用路由指定微服務
- 4.同時指定微服務的serviceId和對應路徑
- 5.同時指定微服務的URL和對應路徑
- 6.同時指定微服務的URL和對應路徑,并且不破壞Zuul的Hystrix 、Ribbon特性
- 7.使用正則表達式指定Zuul的路由匹配規則
- 8.設置路由前綴
- 9.忽略某些路徑
- 小提示
概述
Spring Cloud【Finchley】-14 微服務網關Zuul的搭建與使用中我們搭建了zuul的微服務,對所有注冊在Eureka Server上的服務進行了代理。 當然了,zuul也支持更加細粒度的支持,比如對某些特定的微服務,或者特定的URL等,這里我們繼續來學習下zuul更加豐富的路由配置。
官方指導: https://cloud.spring.io/spring-cloud-static/Finchley.SR2/single/spring-cloud.html#netflix-zuul-reverse-proxy
路由配置
1.忽略指定的微服務
在application.yml中通過 zuul.ignored-services屬性指定忽略的微服務 ,多個服務使用,分隔
zuul:ignored-services: microservice-provider-user,micorservice-consumer-movie-ribbon測試下:
訪問zuul的端口 http://localhost:4534/microservice-provider-user/user/2
同時查看 http://localhost:4534/actuator/routes
說明配置生效了。
2.自定義微服務的訪問路徑
在application.yml中通過配置zuul.routes.微服務的ServiceId :指定路徑
zuul:routes: microservice-provider-user: /userprovider/**這樣microservice-provider-user就會被映射到/userprovider/**路徑
測試一下:
先訪問 http://localhost:4534/microservice-provider-user/user/4
再放問下設置的映射路徑: http://localhost:4534/userprovider/user/4
發現兩個路徑都可以訪問的通,那我們看下zuul的路由映射呢
http://localhost:4534/actuator/routes
格式化如下:
3.忽略所有微服務,只用路由指定微服務
如果只想讓zuul代理指定的微服務,可以將zuul.ignored-services設置為'*' ,然后再routes中設置指定的微服務
zuul:ignored-services: '*'routes: microservice-provider-user: /userprovider/**測試一下:
訪問下映射后的路徑,
那試試原來的地址還能訪問嗎?
http://localhost:4534/microservice-provider-user/user/4
看下 zuul的路由情況 http://localhost:4534/actuator/routes
發現原來的地址沒有被zuul代理, ignored-services: ‘*’ 生效了。
4.同時指定微服務的serviceId和對應路徑
效果同效果同自定義微服務的訪問路徑 ,只不過這里用的是電影微服務
zuul:routes:movie-route: # 該配置方式中,這個名稱是路由名稱,可自定義service-id: micorservice-consumer-movie-ribbonpath: /movie/** #與service-id對應的微服務的路徑測試下:
zuul的路由情況:
訪問 movie微服務映射后的地址 http://localhost:4534/movie/movie/2
5.同時指定微服務的URL和對應路徑
zuul:routes:movie-route: # 該配置方式中,這個名稱是路由名稱,可自定義url: http://localhost:7902/ # 指定的url 7902 為 該微服務的啟動端口path: /movie/** #與service-id對應的微服務的路徑如上配置可以實現將/movie/** 映射到 http://localhost:7902/**
測試
zuul的路由情況:
訪問 movie微服務映射后的地址:
但是這種配置方式的路由不會作為HystrixCommand執行,同時不能使用Ribbon來負載均衡多個URL。 可以使用下面的的配置來使用Zuul的Hystrix 、Ribbon特性
6.同時指定微服務的URL和對應路徑,并且不破壞Zuul的Hystrix 、Ribbon特性
方式一:
根據官網的指導,我們來改造下
zuul:routes:movie-route: # 該配置方式中,這個名稱是路由名稱,可自定義service-id: micorservice-consumer-movie-ribbonpath: /movie/** #與service-id對應的微服務的路徑ribbon:eureka:enabled: false # 為Ribbon禁用Eurekamicorservice-consumer-movie-ribbon: # 上面的service-idribbon:listOfServers: http://localhost:7901,http://localhost:7902方式二:
7.使用正則表達式指定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/**這個路徑
8.設置路由前綴
示例一:
zuul:prefix: /apistrip-prefix: falseroutes: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: # 微服務的serviceIdpath: /user/**strip-prefix: false訪問zuul的 /user/2 將被轉發到microservice-provider-user的/user/2
microservice-provider-user日志:
查看下zuul的路由 http://localhost:4534/actuator/routes
9.忽略某些路徑
如果需要更加細粒度的路由控制,比如想讓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舉個例子:
server:port: 4534spring:application:name: microservice-gateway-zuuleureka:client:service-url:defaultZone: http://artisan:artisan123@localhost:8761/eurekainstance:instance-id: ${spring.application.name}:${spring.application.instance_id:${server.port}}#actuator 啟用所有的監控端點 “*”號代表啟用所有的監控端點,可以單獨啟用,例如,health,info,metrics # spring boot 升為 2.0 后,為了安全,默認 Actuator 只暴露了2個端點,heath 和 info management:endpoints:web:exposure:include: "*" endpoint:health:show-details: ALWAYSzuul:prefix: /apistrip-prefix: falseroutes:microservice-provider-user: /userprovider/**logging:level:com.netflix: DEBUG # 將 com.netflix包的日志級別設置為debug,將打印zuul的轉發細節調用 http://localhost:4534/api/userprovider/3 ,觀察zuul的日志如下
然后去對應的微服務看是否有匹配的路徑即可。
總結
以上是生活随笔為你收集整理的Spring Cloud【Finchley】-16 Zuul的路由配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring Cloud【Finchle
- 下一篇: Spring Cloud【Finchle