Zookeeper依赖关系

使用Zookeeper依赖关系

Spring Cloud Zookeeper可以让您提供应用程序的依赖关系作为属性。作为依赖关系,您可以了解Zookeeper中注册的其他应用程序,您可以通过Feign(REST客户端构建器)以及SpringRestTemplate呼叫。

您还可以从Zookeeper依赖关系观察者功能中受益,这些功能可让您控制和监视依赖关系的状态,并决定如何处理。

如何激活Zookeeper依赖关系

包括对org.springframework.cloud:spring-cloud-starter-zookeeper-discovery的依赖将启用将自动配置Spring Cloud Zookeeper依赖关系的自动配置。

如果您必须正确设置spring.cloud.zookeeper.dependencies部分 - 请查看后续部分以获取更多详细信息,然后该功能处于活动状态

即使您在属性中提供依赖关系,也可以关闭依赖关系。只需将属性spring.cloud.zookeeper.dependency.enabled设置为false(默认为true)。

设置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

现在让我们一个接一个地遍历依赖的每个部分。根属性名称为spring.cloud.zookeeper.dependencies。

别名

在根属性下面,由于Ribbon的限制,必须通过别名来表示每个依赖关系(应用程序ID必须放在URL中,因此您不能传递任何复杂的路径,如/ foo / bar / name )。别名将是您将使用的名称,而不是DiscoveryClient,Feign或RestTemplate的serviceId。

在上述例子中,别名是newsletter和mailing。使用newsletter的Feign使用示例为:

@FeignClient("newsletter")

public interface NewsletterService {

        @RequestMapping(method = RequestMethod.GET, value = "/newsletter")

        String getNewsletters();

}

路径

代表pathyaml属性。

Path是根据Zookeeper注册依赖关系的路径。像Ribbon之前提交的URL,因此这个路径不符合其要求。这就是为什么Spring Cloud Zookeeper将别名映射到正确的路径。

负载平衡器类型

代表loadBalancerTypeyaml属性。

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

STICKY  - 一旦选择了该实例将始终被调用

随机 - 随机选择一个实例

ROUND_ROBIN  - 一遍又一遍地迭代实例

Content-Type模板和版本

代表contentTypeTemplate和versionyaml属性。

如果您通过Content-Type标题版本您的api,那么您不想将此标头添加到您的每个请求中。另外如果你想调用一个新版本的API,你不想漫游你的代码,以增加API版本。这就是为什么您可以提供contentTypeTemplate特殊$version占位符的原因。该占位符将由versionyaml属性的值填充。我们来看一个例子。

拥有以下contentTypeTemplate:

application/vnd.newsletter.$version+json

和以下version:

v1

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

application/vnd.newsletter.v1+json

默认标题

由yaml代表headers映射

有时每次调用依赖关系都需要设置一些默认标头。为了不在代码中这样做,您可以在yaml文件中设置它们。拥有以下headers部分:

headers:

    Accept:

        - text/html

        - application/xhtml+xml

    Cache-Control:

        - no-cache

结果在您的HTTP请求中添加适当的值列表的Accept和Cache-Control标头。

强制依赖

在yaml中由required属性表示

如果您的一个依赖关系在您的应用程序启动时需要启动并运行,则可以在yaml文件中设置required: true属性。

如果您的应用程序无法在引导期间本地化所需的依赖关系,则会抛出异常,并且Spring上下文将无法设置。换句话说,如果Zookeeper中没有注册所需的依赖关系,则您的应用程序将无法启动。

您可以在以下部分阅读有关Spring Cloud Zookeeper存在检查器的更多信息。

存根

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

stubs: org.springframework:foo:stubs

意味着对于特定的依赖关系可以在下面找到:

groupId:org.springframework

artifactId:foo

分类器:stubs- 这是默认值

这实际上等于

stubs: org.springframework:foo

因为stubs是默认分类器。

你可能感兴趣的:(Zookeeper依赖关系)