Netflix Zuul - 影响路由的查找元数据?

时间:2017-09-16 13:43:57

标签: spring-boot spring-cloud netflix-zuul netflix netflix-ribbon

我们正在设计一个应用程序基础架构,目的是将Zuul作为Web应用程序的智能路由器(以及微服务,但这与此问题正交)。

我正在努力理解Zuul想要如何工作,我很失望,因为我无法找到一些信息丰富的概述,所以我可以理解如何做我想做的事情。有谁知道这样的参考?

我们有两个要求,我很难理解Zuul将如何(以及如果)处理。

  1. 我们希望实现基于应用程序版本的路由。此外,如果客户端处于升级模式,我们将返回"稍后再试一次"页。

  2. 我们可能不得不忍受Web应用的粘性会话。

  3. 对于基于版本的路由,我们将能够访问可用于分布式元数据缓存的微服务。在缓存中,我们将获得与基础架构相关的客户端信息。我们可以从请求URL确定客户端。

    因此,我认为我们将在预过滤器中进行客户端查找,并在路由过滤器中使用该信息执行智能操作。有人可以让我开始这个吗?

    对于粘性会话,我发现了以下内容:

    Sticky Sessions using Ribbon

    这看起来非常聪明,似乎是我正在寻找的东西。但是,我想更好地了解其工作原理。有人可以建议吗?

1 个答案:

答案 0 :(得分:1)

有关基于版本的路由的第一个要求,您可以使用版本后缀注册您的微服务。例如,在In Eureka服务器中,两个不同版本的服务 ABC 将注册为:

|--------------|---------|--------------|-------------|
| Application  | AMIs    | Availability | Status      |
|              |         |    Zones     |             |
|--------------|---------|--------------|-------------|
| ABCV1        |(n/a) (1)|       (1)    | UP(1) host1 |
|--------------|---------|--------------|-------------|
| ABCV2        |(n/a) (1)|       (1)    | UP(1) host2 |
|--------------|---------|--------------|-------------|

在Zuul中,您可以根据URL和服务ID创建路由。例如,

zuul:
  ignoredPatterns: /health/**
  routes:
    abc1:
      path: /v1/abc/**
      stripPrefix: false
      serviceId: ABCV1
    abc2:
      path: /v2/abc/**
      stripPrefix: false
      serviceId: ABCV2