查看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