跟我学Spring Cloud(Finchley版)-17-Zuul路由配置详解

上一节( 跟我学Spring Cloud(Finchley版)-16-Zuul )中,已经实现用Zuul转发到Eureka上的微服务。默认的路由规则是:访问$ZUUL_URL/指定为服务/** 会被转发到指定微服务/**

但在实际项目中,往往需要自己定义路由规则,Zuul的路由配置非常灵活、简单,本节详细讲解Zuul的路由配置。

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

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

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

这样设置,microservice-provider-user微服务就会被映射到/user/**路径。

二、忽略指定微服务

忽略服务非常简单,可以使用zuul.ignored-services 配置需要忽略的服务,多个用逗号分隔。例如:

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

这样就可让Zuul忽略microservice-provider-user和microservice-consumer-movie微服务,只代理其他微服务。

三、忽略所有微服务,只路由指定的微服务

很多场景下,我们可能只想要让Zuul代理指定的微服务,此时可以将zuul.ignored-services 设为’*’

zuul:
  ignored-services: ‘*‘   # 使用‘*‘可忽略所有微服务
  routes:
    microservice-provider-user: /user/**

这样就可以让Zuul只路由microservice-provider-user微服务。

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

例如:

zuul:
  routes:
    user-route:                   # 该配置方式中,user-route只是给路由一个名称,可以任意起名。
      service-id: microservice-provider-user
      path: /user/**              # service-id对应的路径

本例配置的效果同示例(1)。

五、同时指定path和URL,例如:

zuul:
  routes:
    user-route:                   # 该配置方式中,user-route只是给路由一个名称,可以任意起名。
      url: http://localhost:8000/ # 指定的url
      path: /user/**              # url对应的路径。

这样就可以将/user/** 映射到http://localhost:8000/**

需要注意的是,使用这种方式配置的路由不会作为HystrixCommand执行,同时也不能使用Ribbon来负载均衡多个URL。例(6)可解决该问题。

六、同时指定path和URL,并且不破坏Zuul的Hystrix、Ribbon特性。

zuul:
  routes:
    user-route:
      path: /user/**
      service-id: microservice-provider-user
ribbon:
  eureka:
    enabled: false
microservice-provider-user:
  ribbon:
    listOfServers: localhost:8000,localhost:8001

这样就可以既指定path与URL,又不破坏Zuul的Hystrix与Ribbon特性了。

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

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

@Bean
public PatternServiceRouteMapper serviceRouteMapper() {
  // 调用构造函数PatternServiceRouteMapper(String servicePattern, String routePattern)
  // servicePattern指定微服务的正则
  // routePattern指定路由正则
  return new PatternServiceRouteMapper("(?<name>^.+)-(?<version>v.+$)", "${version}/${name}");
}

通过这段代码即可实现将诸如microservice-provider-user-v1这个微服务,映射到/v1/microservice-provider-user/**这个路径。

八、路由前缀

示例1:

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

这样,访问Zuul的/api/microservice-provider-user/1路径,请求将会被转发到microservice-provider-user的/api/1

示例2:

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

这样访问Zuul的/user/1路径,请求将会被转发到microservice-provider-user的/user/1

TIPS:

① 可参考该Issue辅助理解: https://github.com/spring-cloud/spring-cloud-netflix/issues/1365

九、忽略某些路径

上文我们讲解了如何忽略微服务,但有时我们还需要更细粒度的路由控制。例如,我们想让Zuul代理某个微服务,同时又想保护该微服务的某些敏感路径。此时,可使用ignoredPatterns,指定忽略的正则。例如:

zuul:
  ignoredPatterns: /**/admin/**   # 忽略所有包含/admin/的路径
  routes:
    microservice-provider-user: /user/**

这样就可将microservice-provider-user微服务映射到/user/**路径,但会忽略该微服务中所有包含/admin/的路径。

小技巧

读者如无法掌握Zuul路由的规律,可将com.netflix包的日志级别设为DEBUG。这样,Zuul就会打印转发的具体细节,从而帮助我们更好地理解Zuul的路由配置,例如:

logging:
  level:
    com.netflix: DEBUG

本文首发

http://www.itmuch.com/spring-cloud/finchley-17/

干货分享

原文地址:http://blog.51cto.com/10180481/2347111

时间: 2024-10-12 17:18:45

跟我学Spring Cloud(Finchley版)-17-Zuul路由配置详解的相关文章

Spring Cloud:使用Ribbon实现负载均衡详解(下)

在上一篇文章(Spring Cloud:使用Ribbon实现负载均衡详解(上))中,我对 Ribbon 做了一个介绍,Ribbon 可以实现直接通过服务名称对服务进行访问.这一篇文章我详细分析一下如何使用 Ribbon 实现客户端的负载均衡. 1. 使用 Ribbon 实现负载均衡 要实现负载均衡,首先要有多个订单服务提供者,目前我们就一个 microservice-order-provider01,端口号 8001,我们可以仿照这个服务,再创建两个子模块,也是订单服务提供者,取名为 micro

spring基于通用Dao的多数据源配置详解【ds1】

spring基于通用Dao的多数据源配置详解 有时候在一个项目中会连接多个数据库,需要在spring中配置多个数据源,最近就遇到了这个问题,由于我的项目之前是基于通用Dao的,配置的时候问题不断,这种方式和资源文件冲突:扫描映射文件的话,SqlSessionFactory的bean名字必须是sqlSessionFactory 他读不到sqlSessioNFactory2或者其他名字,最终解决方法如下: 1.在项目中加入如下类MultipleDataSource.java ? 1 2 3 4 5

从Spring到SpringBoot构建WEB MVC核心配置详解

目录 理解Spring WEB MVC架构的演变 认识Spring WEB MVC 传统时代的Spring WEB MVC 新时代Spring WEB MVC SpringBoot简化WEB MVC开发 自动装配 条件装配 外部化配置 本章源码下载 理解Spring WEB MVC架构的演变 基础Servlet架构 核心架构:前端控制器 Spring WEB MVC架构 认识Spring WEB MVC 传统时代的Spring WEB MVC 怎么讲呢?就是很传统的使用Spring Framew

spring cloud 2.x版本 Gateway路由网关教程

前言 本文采用Spring cloud本文为2.1.8RELEASE,version=Greenwich.SR3 本文基于前两篇文章eureka-server.eureka-client.eureka-ribbon和eureka-feign的实现. 参考 eureka-server eureka-client eureka-ribbon eureka-feign 概念 Spring Cloud Gateway是Spring Cloud的一个新项目,该项目是基于Spring5.0,Sprint B

跟我学Spring Cloud(Finchley版)-07-Ribbon入门

经过前文讲述,我们已经实现了服务发现.本节来解决 跟我学Spring Cloud(Finchley版)-02-构建分布式应用 提到的如下问题: 负载均衡如何考虑?难道得在电影微服务和用户微服务之间加个NGINX做负载均衡吗?听起来是可行的,但如果有10000+服务(这并不夸张,我司的微服务数目是这个数字乘以N,N >= m,哈哈哈)那这个NGINX的配置得有多复杂-- 一般来说,提到负载均衡,大家一般很容易想到浏览器 -> NGINX -> 反向代理多个Tomcat这样的架构图--业界管

跟我学Spring Cloud(Finchley版)-13-通用方式使用Hystrix

本节详细讲解使用Hystrix的通用方式. 简介 Hystrix是由Netflix开源的一个延迟和容错库,用于隔离访问远程系统.服务或者第三方库,防止级联失败,从而提升系统的可用性与容错性.Hystrix主要通过以下几点实现延迟和容错. 包裹请求 使用HystrixCommand(或HystrixObservableCommand)包裹对依赖的调用逻辑,每个命令在独立线程中执行.这使用到了设计模式中的"命令模式". 跳闸机制 当某服务的错误率超过一定阈值时,Hystrix可以自动或者手

跟我学Spring Cloud(Finchley版)-20-Spring Cloud Config-Git仓库配置详解 原

在跟我学Spring Cloud(Finchley版)-19-配置中心-Spring Cloud Config 一节中,已实现使用Git仓库作为Config Server的后端存储,本节详细探讨如何配置Git仓库. 一.占位符支持 Config Server的占位符支持{application}.{profile}和{label}. 示例: server: port: 8080 spring: application: name: microservice-config-server cloud

跟我学Spring Cloud(Finchley版)-20-Spring Cloud Config-

在跟我学Spring Cloud(Finchley版)-19-配置中心-Spring Cloud Config 一节中,已实现使用Git仓库作为Config Server的后端存储,本节详细探讨如何配置Git仓库. 一.占位符支持 Config Server的占位符支持{application}.{profile}和{label}. 示例: server: port: 8080 spring: application: name: microservice-config-server cloud

跟我学Spring Cloud(Finchley版)-19-配置中心-Spring Cloud Co

经过前文讲解,至此,微服务架构已经日趋完善--现在已经可以做一个大型的应用了!然而,随着项目的迭代,微服务数目往往与日俱增,如何高效地管理配置成为我们必须解决的问题.本节来讨论如何使用Spring Cloud Config管理配置. 为什么要使用配置中心 集中管理配置.一个使用微服务架构的应用系统可能会包含成百上千个微服务,因此集中管理配置是非常有必要的: 不同环境,不同配置.例如,数据源配置在不同的环境(开发.测试.预发布.生产等)中是不同的: 运行期间可动态调整.例如,我们可根据各个微服务的