javascript
Spring Cloud【Finchley】-16 Zuul的路由配置
文章目錄
- 概述
- 路由配置
- 1.忽略指定的微服務(wù)
- 2.自定義微服務(wù)的訪問路徑
- 3.忽略所有微服務(wù),只用路由指定微服務(wù)
- 4.同時(shí)指定微服務(wù)的serviceId和對(duì)應(yīng)路徑
- 5.同時(shí)指定微服務(wù)的URL和對(duì)應(yīng)路徑
- 6.同時(shí)指定微服務(wù)的URL和對(duì)應(yīng)路徑,并且不破壞Zuul的Hystrix 、Ribbon特性
- 7.使用正則表達(dá)式指定Zuul的路由匹配規(guī)則
- 8.設(shè)置路由前綴
- 9.忽略某些路徑
- 小提示
概述
Spring Cloud【Finchley】-14 微服務(wù)網(wǎng)關(guān)Zuul的搭建與使用中我們搭建了zuul的微服務(wù),對(duì)所有注冊(cè)在Eureka Server上的服務(wù)進(jìn)行了代理。 當(dāng)然了,zuul也支持更加細(xì)粒度的支持,比如對(duì)某些特定的微服務(wù),或者特定的URL等,這里我們繼續(xù)來學(xué)習(xí)下zuul更加豐富的路由配置。
官方指導(dǎo): https://cloud.spring.io/spring-cloud-static/Finchley.SR2/single/spring-cloud.html#netflix-zuul-reverse-proxy
路由配置
1.忽略指定的微服務(wù)
在application.yml中通過 zuul.ignored-services屬性指定忽略的微服務(wù) ,多個(gè)服務(wù)使用,分隔
zuul:ignored-services: microservice-provider-user,micorservice-consumer-movie-ribbon測(cè)試下:
訪問zuul的端口 http://localhost:4534/microservice-provider-user/user/2
同時(shí)查看 http://localhost:4534/actuator/routes
說明配置生效了。
2.自定義微服務(wù)的訪問路徑
在application.yml中通過配置zuul.routes.微服務(wù)的ServiceId :指定路徑
zuul:routes: microservice-provider-user: /userprovider/**這樣microservice-provider-user就會(huì)被映射到/userprovider/**路徑
測(cè)試一下:
先訪問 http://localhost:4534/microservice-provider-user/user/4
再放問下設(shè)置的映射路徑: http://localhost:4534/userprovider/user/4
發(fā)現(xiàn)兩個(gè)路徑都可以訪問的通,那我們看下zuul的路由映射呢
http://localhost:4534/actuator/routes
格式化如下:
3.忽略所有微服務(wù),只用路由指定微服務(wù)
如果只想讓zuul代理指定的微服務(wù),可以將zuul.ignored-services設(shè)置為'*' ,然后再routes中設(shè)置指定的微服務(wù)
zuul:ignored-services: '*'routes: microservice-provider-user: /userprovider/**測(cè)試一下:
訪問下映射后的路徑,
那試試原來的地址還能訪問嗎?
http://localhost:4534/microservice-provider-user/user/4
看下 zuul的路由情況 http://localhost:4534/actuator/routes
發(fā)現(xiàn)原來的地址沒有被zuul代理, ignored-services: ‘*’ 生效了。
4.同時(shí)指定微服務(wù)的serviceId和對(duì)應(yīng)路徑
效果同效果同自定義微服務(wù)的訪問路徑 ,只不過這里用的是電影微服務(wù)
zuul:routes:movie-route: # 該配置方式中,這個(gè)名稱是路由名稱,可自定義service-id: micorservice-consumer-movie-ribbonpath: /movie/** #與service-id對(duì)應(yīng)的微服務(wù)的路徑測(cè)試下:
zuul的路由情況:
訪問 movie微服務(wù)映射后的地址 http://localhost:4534/movie/movie/2
5.同時(shí)指定微服務(wù)的URL和對(duì)應(yīng)路徑
zuul:routes:movie-route: # 該配置方式中,這個(gè)名稱是路由名稱,可自定義url: http://localhost:7902/ # 指定的url 7902 為 該微服務(wù)的啟動(dòng)端口path: /movie/** #與service-id對(duì)應(yīng)的微服務(wù)的路徑如上配置可以實(shí)現(xiàn)將/movie/** 映射到 http://localhost:7902/**
測(cè)試
zuul的路由情況:
訪問 movie微服務(wù)映射后的地址:
但是這種配置方式的路由不會(huì)作為HystrixCommand執(zhí)行,同時(shí)不能使用Ribbon來負(fù)載均衡多個(gè)URL。 可以使用下面的的配置來使用Zuul的Hystrix 、Ribbon特性
6.同時(shí)指定微服務(wù)的URL和對(duì)應(yīng)路徑,并且不破壞Zuul的Hystrix 、Ribbon特性
方式一:
根據(jù)官網(wǎng)的指導(dǎo),我們來改造下
zuul:routes:movie-route: # 該配置方式中,這個(gè)名稱是路由名稱,可自定義service-id: micorservice-consumer-movie-ribbonpath: /movie/** #與service-id對(duì)應(yīng)的微服務(wù)的路徑ribbon:eureka:enabled: false # 為Ribbon禁用Eurekamicorservice-consumer-movie-ribbon: # 上面的service-idribbon:listOfServers: http://localhost:7901,http://localhost:7902方式二:
7.使用正則表達(dá)式指定Zuul的路由匹配規(guī)則
@Bean public PatternServiceRouteMapper serviceRouteMapper() {return new PatternServiceRouteMapper("(?<name>^.+)-(?<version>v.+$)","${version}/${name}"); }看下 PatternServiceRouteMapper
構(gòu)造函數(shù)兩個(gè)參數(shù) servicePattern 和 routePattern
- servicePattern 微服務(wù)正則
- routePattern 路由正則
上述的規(guī)則含義是 將 microservice-provider-user-v1這種微服務(wù),映射到/v1/microservice-provider-user/**這個(gè)路徑
8.設(shè)置路由前綴
示例一:
zuul:prefix: /apistrip-prefix: falseroutes:microservice-provider-user: /userprovider/**microservice-provider-user的控制層增加如下方法用作測(cè)試
訪問 : http://localhost:4534/api/userprovider/3
訪問zuul的 http://localhost:4534/api/userprovider/3 被轉(zhuǎn)發(fā)到 microservice-provider-user的 /api/{id} 方法 。
查看zuul的路由規(guī)則 http://localhost:4534/actuator/routes
示例二:
zuul:routes:microservice-provider-user: # 微服務(wù)的serviceIdpath: /user/**strip-prefix: false訪問zuul的 /user/2 將被轉(zhuǎn)發(fā)到microservice-provider-user的/user/2
microservice-provider-user日志:
查看下zuul的路由 http://localhost:4534/actuator/routes
9.忽略某些路徑
如果需要更加細(xì)粒度的路由控制,比如想讓zuul代理某個(gè)服務(wù),同時(shí)又想保護(hù)該微服務(wù)的某些敏感路徑,這個(gè)時(shí)候 ignored-patterns屬性就派上用場(chǎng)了。
zuul:routes:microservice-provider-user: /userprovider/**ignored-patterns: /**/admin/** # 忽略包含admin的路徑小提示
如果想看更多zuul的轉(zhuǎn)發(fā)細(xì)節(jié),請(qǐng)將 com.netflix包的日志設(shè)置為debug級(jí)別。
application.yml中增加
logging:level:com.netflix: DEBUG # 將 com.netflix包的日志級(jí)別設(shè)置為debug舉個(gè)例子:
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 啟用所有的監(jiān)控端點(diǎn) “*”號(hào)代表啟用所有的監(jiān)控端點(diǎn),可以單獨(dú)啟用,例如,health,info,metrics # spring boot 升為 2.0 后,為了安全,默認(rèn) Actuator 只暴露了2個(gè)端點(diǎn),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包的日志級(jí)別設(shè)置為debug,將打印zuul的轉(zhuǎn)發(fā)細(xì)節(jié)調(diào)用 http://localhost:4534/api/userprovider/3 ,觀察zuul的日志如下
然后去對(duì)應(yīng)的微服務(wù)看是否有匹配的路徑即可。
總結(jié)
以上是生活随笔為你收集整理的Spring Cloud【Finchley】-16 Zuul的路由配置的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring Cloud【Finchle
- 下一篇: Spring Cloud【Finchle