72. Zookeeper 依赖关系

72.1 使用 Zookeeper 依赖项

Spring Cloud Zookeeper 使您可以将 application 的依赖项作为 properties 提供。作为依赖项,您可以理解在 Zookeeper 中注册的其他应用程序,以及您希望通过假装(REST client 构建器)和Spring RestTemplate调用的应用程序。

您还可以从 Zookeeper Dependency Watchers 功能中受益,该功能允许您控制和监视依赖项的 state,并决定如何处理它。

72.2 如何激活 Zookeeper 依赖项

72.3 设置 Zookeeper 依赖项

让我们仔细看看依赖关系表示的一个例子:

application.yml.

spring.application.name: yourServiceName
spring.cloud.zookeeper:
  dependencies:
    newsletter:
      path: /path/where/newsletter/has/registered/in/zookeeper
      loadBalancerType: ROUND_ROBIN
      contentTypeTemplate: application/vnd.newsletter.$version+json
      version: v1
      headers:
        header1:
            - value1
        header2:
            - value2
      required: false
      stubs: org.springframework:foo:stubs
    mailing:
      path: /path/where/mailing/has/registered/in/zookeeper
      loadBalancerType: ROUND_ROBIN
      contentTypeTemplate: application/vnd.mailing.$version+json
      version: v1
      required: true

现在让我们逐个完成依赖的每个部分。根 property name 是spring.cloud.zookeeper.dependencies

72.3.1 别名

在根 property 下面,由于 Ribbon 的约束,你必须通过别名来表示每个依赖项(application id 必须放在 URL 中,因此你不能传递像/foo/bar/name 这样的复杂路径)。别名将是您将使用的 name,而不是_I_,FeignRestTemplate的 serviceId。

在上述示例中,别名是newslettermailing。 使用newsletter的 Feign 用法示例如下:

@FeignClient("newsletter")
public interface NewsletterService {
        @RequestMapping(method = RequestMethod.GET, value = "/newsletter")
        String getNewsletters();
}

72.3.2 路径

path yaml property 代表。

Path 是在 Zookeeper 下注册依赖项的路径。就像 Ribbon 在 URL 上运行之前所呈现的那样,这条路径不符合其要求。这就是为什么 Spring Cloud Zookeeper maps 将别名转换为正确的路径。

72.3.3 负载均衡器类型

loadBalancerType yaml property 代表。

如果您知道在调用此特定依赖项时必须应用哪种负载平衡策略,那么您可以在 yaml 文件中提供它,它将自动应用。您可以选择以下负载平衡策略之一

72.3.4 Content-Type 模板和 version

contentTypeTemplateversion yaml property 代表。

如果您通过Content-Type标头 version 您的 api,那么您不希望将此标头添加到您的每个请求中。此外,如果您想调用 API 的新 version,您不希望在 code 周围漫游以提升 API version。这就是为什么你可以为contentTypeTemplate提供一个特殊的$version占位符。该占位符将由version yaml property 的 value 填充。我们来看一个 example。

拥有以下contentTypeTemplate

application/vnd.newsletter.$version+json

以及version

v1

将导致为每个请求设置Content-Type标头:

application/vnd.newsletter.v1+json

72.3.5 默认 headers

由 yaml 中的headers map 表示

有时每次调用依赖项都需要设置一些默认的 headers。在 code 中不要在 code 中执行此操作,您可以在 yaml 文件中设置它们。拥有以下headers部分:

headers:
    Accept:
        - text/html
        - application/xhtml+xml
    Cache-Control:
        - no-cache

导致在 HTTP 请求中添加AcceptCache-Control headers 以及适当的值列表。

72.3.6 强制性依赖

由 yll 中的required property 代表

如果您的 application 启动时需要启动其中一个依赖项并运行 running,那么在 yaml 文件中设置required: true property 就足够了。

如果你的 application 在 boot time 期间无法本地化所需的依赖项,它将抛出 exception 并且 Spring Context 将无法设置。换句话说,如果在 Zookeeper 中未注册所需的依赖项,则 application 将无法启动。

您可以在以下部分中阅读有关 Spring Cloud Zookeeper Presence Checker 的更多信息。

72.3.7 存根

您可以为包含依赖项存根的 JAR 提供冒号分隔的路径。 例

stubs: org.springframework:foo:stubs

意味着对于特定的依赖项可以在以下位置找到:

这实际上等于

stubs: org.springframework:foo

因为stubs是默认分类器。

72.4 配置 Spring Cloud Zookeeper 依赖项

您可以设置一堆 properties 来启用/禁用 Zookeeper Dependencies 功能的部分。

首页