Zuul路由转发规则

Posted 异想天开

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Zuul路由转发规则相关的知识,希望对你有一定的参考价值。

定制的路由规则的主要功能:

 1、路由表中包含源路径,微服务名称,目标路径

 2、Endpoint粒度配置支持

 3、路由支持1对1精确路由

 4、源路径可以前缀/**格式来模糊路由

 5、目标路径可以使用前缀/**格式来装配目标路径

 6、保留默认动态路由规则:服务名称/** --> 是否截去前缀 --> 目标路径

 7、保留默认动态路由规则是否支持截去前缀的配置参数stripPrefix特性

 8、路由规则可以在不重启服务动态更新,这个功能通过外化配置来支持

 9、匹配股则采取谁先匹配路由谁,也就是说在路由表中有2个或以上的路由规则可能被匹配到时,匹配最先查询到的规则

路由规则格式采用properties格式:

源路径 = 微服务名称, 目标路径

启动时读取配置并解析,放入路由表。请求时通过查询匹配到合适的路由转发。

例如:

/api/v1/trade=trade,/v1/trade
/api/customer/**=customer,/api/v1/**
/api/user/**=user

在上面的例子中:

  • /api/v1/trade会精确的路由到trade微服务的/v1/trade;
  • /api/customer/开头的api会路由转发到customer微服务的/api/v1/**,其中后面的**会被前面的**部分替换,比如/api/customer/card->/api/v1/card的转换
  • /api/user/开头的api会路由转发到user微服务的/api/user/**,endppoint不变

一、直观显示路径到微服务的映射

#localhost:8888/routes(Zuul对应的IP及端口)
management:
  security:
    enabled: false

  

 

 二、路由配置

    1、静态路由

#除了“users”服务,其他的服务都会被忽略
zuul:
  ignoredServices: \'*\'
  routes:
    users: /myusers/**

#前端通过/myusers的http访问,将会被后端“users”服务处理(例如:/myusers/101将会转发的/101)
zuul:
  routes:
    users: /myusers/**

#将xxx/books后面的所有请求,添加到url后面去
示例:http://localhost:8888/books/xxx->http://localhost:5000/books/avaiable/xxx
zuul:
  routes:
    books: http://localhost:5000/books/available

#books/xxx=>转化为http://localhost:5000/books/available/xxx
示例:http://localhost:8888/books/xxx==>http://localhost:50000/books/available/xxx
server:
  port: 8888
spring:
  application:
    name: zuul-gateway
zuul:
  routes:
    books:
      url: http://localhost:5000/books/available

#/baidu后的所有直接添加到http://localhost:8080后
示例:http://localhost:8888/baidu/**=>http://localhost:8080/**
zuul:
  routes:
    baidu:
      path: /baidu/**
      url: http://localhost:8080

 2、静态路由+ribbon负载均衡/故障切换

zuul:
  routes:
    myroutes1:
      path: /mypath/**
      serviceId: myserverId
myserverId:
  ribbon:
    listOfServers: localhost:8080, localhost:8081
ribbon:
  eureka:
    enabled: false

 3、动态路由+ribbon负载均衡/故障切换

zuul:
  routes:
    myroutes1:
      path: /mypath/**
      serviceId: myserviceId
eureka:
  client:
    serviceUrl:
      defaultZne:xxx

 4、路由匹配配置

stripPrefix=true,转发会过滤掉前缀
path: /myusers/**,默认时转发到服务的请求是/**,如果stripPrefix=false,转发的请求是/myusers/**
zuul.prefix=/api	会对所有的path增加一个/api前缀
ignoredPatterns: /**/admin/**	过滤掉匹配的url
route:
  users: /myusers/**	
  会匹配所有/myusers/**的url,但由于ignoredPatterns, /myusers/**/admin/**的请求不会被转发,而是直接由zuul里的接口接收

5、匹配顺序

path:/myusers/**
path:/**	
如果是在application.yml中配置的,那么会优先匹配/myusers/**
但如果是applicaiton.properties配置的,那么可能导致/myusers/**被/**覆盖
ignored-Services: ‘*‘	对于自动发现的services,除了route中明确指定的,其他都会被忽略

6、请求头过滤

route.sensitiveHeaders: Cookie,Set-Cookie,Authorization	
默认就有这三个请求头,意思是不向下游转发请求这几个头
zuul.ignoredHeaders 是一个全局设置,而route.sensitiveHeaders是局部设置

参见:http://1754966750.blog.51cto.com/7455444/1958422

以上是关于Zuul路由转发规则的主要内容,如果未能解决你的问题,请参考以下文章

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

Spring cloud学习--Zuul02

第六章API服务网关(Zuul) 下

SpringCloud Zuul网关的简单理解

SpringCloud Zuul路由转发原理及源码解析

第四篇:路由网关(zuul)