springCloud(14):使用Zuul构建微服务网关-路由端点与路由配置详解

1、Zuul的路由端点java

当@EnableZuulProxy与SpringBoot Actuator配合使用时,Zuul会暴露一个路由管理端点/routes。借助这个端点,能够方便、直观地查看以及管理Zuul的路由。正则表达式

/routes端点的使用很是简单,使用GET方法访问该端点,便可返回Zuul当前映射的路由列表;使用POST方法访问该端点就会强制刷新Zuul当前映射的路由列表(尽管路由会自动刷新,Spring Cloud依然提供了强制当即刷新的方式)。spring


因为spring-cloud-starter-zuul已经包含了spring-boot-starter-actuator,所以以前编写的microservice-gateway-zuul已具有路由管理的能力。api


测试:app

 一、依次启动eureka-server(4010)、eureka-server-2(5010)、provide-user(4011)、hystrix-consumer-movie(5012)、microservice-gateway-zuul(5016)负载均衡

 二、访问http://localhost:5016/routes,结果报401ide

   wKiom1mb7yqx4WhnAABaxJ8lMvI356.png

   解决:配置management.security.enabled=falsespring-boot

    wKioL1mb757gJcpcAABgwt7jkjQ519.png

从中能够直观地看出路径到微服务的映射。微服务

2、路由配置详解
测试

前面已经编写了一个简单的Zuul网关,并让该网关代理了全部注册到Eureka Server的微服务。但在现实中可能只想让Zuul代理部分微服务,又或者须要对URL进行更加精确的控制。

2.一、自定义指定微服务的访问路径

配置zuul.routes.指定微服务的serverId = 指定路径便可。例如:

zuul:
  routes:
    hystrix-consumer-movie: /movie/**

效果:

  wKioL1mb8f7AXmvAAABDrim09uU285.png

2.二、忽略指定微服务

使用zuul.ignored-services配置须要忽略的服务,多个用逗号分隔,例如:

zuul:
  ignored-services: provide-user

效果:

  wKioL1mb85_wsI5PAABJQdh4oqo014.png

2.三、忽略全部微服务,只路由指定微服务

将zuul.ignored-services设为'*',routes配置指定的微服务,例如:

zuul:
  ignored-services: '*'
  routes:
    hystrix-consumer-movie: /movie/**

效果:

  wKiom1mb9H-wKCpDAAAYNgu-ZBE372.png

2.四、同时指定微服务的serviceId和对应的路径

zuul:
  routes:
    user-route: # user-route只是给路由一个名称,能够随便命名
     service-id: hystrix-consumer-movie
     path: /movie/**  # service-id对应的路径

效果与2.1同样。

2.五、同时指定path和URL

zuul:
  routes:
    user-route: # user-route只是给路由一个名称,能够随便命名
     url: http://localhost:5200/ #指定URL
     path: /movie/**  # URL对应的路径

说明:当访问http://localhost:5016/movie/user/1时,则会转发至http://localhost:5200/user/1

效果:

  wKiom1mb9q_Q0q0OAABCOErrr7s599.png

注意:使用这种方式配置的路由不会做为HystrixCommand执行,同时也不能使用Ribbon来负载均衡多个URL

2.六、同时指定path和URL,而且不破坏Hystrix、Ribbon特性

zuul:
  routes:
    user-route: 
     path: /user/** 
     service-id: provide-user
ribbon: 
  eureka: 
    enabled: false  # 为Ribbon禁用Eureka
provide-user: # 这边是serviceId
  ribbon: 
    listOfServers: http://localhost:4011,http://localhost:4012

2.七、使用正则表达式指定Zuul的路由匹配规则

借助PatternServiceRouteMapper,实现从微服务到映射路由的正则配置。

@SpringBootApplication
@EnableZuulProxy
public class Application {
	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
	}
	
	/*正则表达式指定Zuul的路由匹配规则**/
	@Bean
	public PatternServiceRouteMapper serviceRouteMapper() {
		return new PatternServiceRouteMapper("(?<name>^.+)-(?<version>v.+$)", "${version}/${name}");
	}
}

说明:上面将如provide-user-v2这个微服务,映射到/v2/provide-user/**这个路径上

 例:咱们队微服务的serviceId命名为provide-user-v2,那么咱们能够这么来访问http://localhost:5017/v2/provide-user/1

2.八、路由前缀

设置 zuul.prefix 能够为全部的匹配增长前缀, 例如 /api,代理前缀默认会从请求路径中移除(经过zuul.stripPrefix=false能够关闭这个功能),zuul.stripPrefix默认为true.

如:配置全局的,与prefix一块儿使用

zuul:
  prefix: /api
  strip-prefix: true

当strip-prefix=true的时候 (http://localhost:5016/api/provide-user/1 -> http://localhost:4011/1)  

当strip-prefix=false的时候(http://localhost:5016/api/provide-user/1 -> http://localhost:4011/api/1)  

说明上面为true的配置,当访问zuul的/api/provide-user/1路径,请求将会被转发到provide-user微服务的/1路径


如:配置局部的,与path一块儿使用

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

当strip-prefix=true的时候 (http://localhost:5016/user/1 -> http://localhost:4011/1)  

当strip-prefix=false的时候(http://localhost:5016/user/1 -> http://localhost:4011/user/1)

说明上面为true的配置,当访问zuul的/user/1路径,请求将会被转发到provide-user微服务的/1路径

2.九、忽略某些路径

2.2中有讲有忽略微服务,可是有时须要更细粒度的路由控制。如,想让Zuul代理某个微服务,同时又想保护该微服务的某些敏感路径。此时,可以使用ignored-patterns指定忽略的正则,如:

zuul:
  ignored-patterns: /**/provide-user/** # 忽略全部包含/provide-user/的路径
相关文章
相关标签/搜索