欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring Cloud Zuul 中路由配置详解

程序员文章站 2022-07-12 19:11:07
...

首先我们平时写zuul路由可能会这样写

zuul:
  ignored-services: '*'
  routes:
    test1:
      path: /test1/**
      serviceId: zebra-test
    test2:
      path: /test2/**
      serviceId: zebra-test

当我的访问地址符合/test1/**规则的时候,会被自动定位到zebra-test服务上去,不过两行代码有点麻烦,我们可以用下面一行代码来代替,如下:

zebra-test: /test3/**

zuul.routes后面跟着的是服务名,服务名后面跟着的是路径规则,这种配置方式显然更简单。

 

如果映射规则我们什么都不写,系统也给我们提供了一套默认的配置规则,默认的配置规则如下:

  zuul.routes.zebra-test.path=/zebra-test/**
  zuul.routes.zebra-test.serviceId=zebra-test

默认情况下,Eureka上所有注册的服务都会被Zuul创建映射关系来进行路由,我们可以禁用默认路由,只认配置的路由

ignored-services: '*'

还有我们定义路由规则/test1/**的时候,为什么最后面是两个*,一个可不可以呢?当然可以,不过意义可就不一样了,Zuul中的路由匹配规则使用了Ant风格定义,一共有三种不同的通配符:

通配符 含义
? 匹配任意单个字符
* 匹配任意数量的字符
** 匹配任意数量的字符

我们也可以统一的为路由规则增加前缀,设置方式如下:

zuul:
  prefix: /api

我们在使用Nginx的时候,会涉及到一个请求头信息的配置,防止页面重定向后跳转到上游服务器上去,这个问题在Zuul中一样存在,假设我的feign-consumer中提供了一个接口/hello4,当访问/hello4接口的时候,页面重定向到/hello,默认情况下,重定向的地址是具体的服务实例的地址,而不是API网关的跳转地址,这种做法会暴露真实的服务地址,所以需要在Zuul中配置,配置方式很简单,如下:
表示API网关在进行请求路由转发前为请求设置Host头信息。

zuul:
  add-host-header: true

默认情况下,敏感的头信息无法经过API网关进行传递,我们可以通过如下配置使之可以传递,可以写在顶层也可以写在具体哪一个服务:

zuul:
  sensitiveHeaders:

如果我们想关闭Hystrix重试机制,可以通过如下方式:

关闭全局重试机制:

zuul:
  retryable: false

关闭某一个服务的重试机制:

zuul:
  routes:
    feign-consumer:
      retryable: false

 

相关标签: zuul