6. Zookeeper 依赖项
以下主题介绍如何使用 Spring Cloud Zookeeper 依赖项:
6.1. 使用 Zookeeper 依赖项
Spring Cloud Zookeeper 使您能够提供应用程序的依赖项
作为属性。作为依赖项,您可以了解已注册的其他应用程序
在 Zookeeper 中,并且您希望通过 Feign(一个 REST 客户端构建器)、Spring RestTemplate
和 Spring WebFlux 调用它。
您还可以使用 Zookeeper Dependency Watchers 功能来控制和监控 依赖项的状态。
6.2. 激活 Zookeeper 依赖项
包括 enable 的依赖项
auto配置来设置 Spring Cloud Zookeeper 依赖项。即使您提供
dependencies 中,您可以关闭依赖项。为此,请将该属性设置为 false(默认为 )。org.springframework.cloud:spring-cloud-starter-zookeeper-discovery
spring.cloud.zookeeper.dependency.enabled
true
6.3. 设置 Zookeeper 依赖项
请考虑以下依赖项表示示例:
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
接下来的几节将逐一介绍依赖项的每个部分。root 属性
name 为 。spring.cloud.zookeeper.dependencies
6.3.1. 别名
在 root 属性下,您必须将每个依赖项表示为别名。
这是由于 Spring Cloud LoadBalancer 的约束,它要求将应用程序 ID 放在 URL 中。
因此,您不能传递任何复杂路径,例如 )。
别名是您使用的名称,而不是 for 、 或 ./myApp/myRoute/name
serviceId
DiscoveryClient
Feign
RestTemplate
在前面的示例中,别名是 和 。
以下示例显示了使用别名的 Feign 用法:newsletter
mailing
newsletter
@FeignClient("newsletter")
public interface NewsletterService {
@RequestMapping(method = RequestMethod.GET, value = "/newsletter")
String getNewsletters();
}
6.3.2. 路径
该路径由 YAML 属性表示,并且是在 Zookeeper 下注册依赖项的路径。
如上一节所述,Spring Cloud LoadBalancer 对 URL 进行操作。
因此,此路径不符合其要求。
这就是 Spring Cloud Zookeeper 将别名映射到正确路径的原因。path
6.3.3. 负载均衡器类型
负载均衡器类型由 YAML 属性表示。loadBalancerType
如果您知道在调用此特定依赖项时必须应用哪种负载平衡策略,则可以在 YAML 文件中提供该策略,并且它会自动应用。 您可以选择以下负载均衡策略之一:
-
STICKY:选择后,将始终调用实例。
-
RANDOM:随机选择一个实例。
-
ROUND_ROBIN:一遍又一遍地迭代实例。
6.3.4. Content-Type
模板和版本
模板和版本由 和 YAML 属性表示。Content-Type
contentTypeTemplate
version
如果您在标头中对 API 进行版本控制,则不需要添加此标头
添加到您的每个请求中。此外,如果要调用新版本的 API,则不要
想要在代码中漫游以提高 API 版本。这就是为什么你可以提供一个特殊的占位符。该占位符将由 YAML 属性的值填充。请考虑以下示例 :Content-Type
contentTypeTemplate
$version
version
contentTypeTemplate
application/vnd.newsletter.$version+json
进一步考虑以下几点:version
v1
和 version 的组合会导致为每个请求创建一个标头,如下所示:contentTypeTemplate
Content-Type
application/vnd.newsletter.v1+json
6.3.5. 默认 Headers
默认标头由 YAML 中的 map 表示。headers
有时,每次调用依赖项都需要设置一些默认标头。要不
在代码中执行此操作,您可以在 YAML 文件中设置它们,如以下示例部分所示:headers
headers:
Accept:
- text/html
- application/xhtml+xml
Cache-Control:
- no-cache
该部分导致将 和 标头与
HTTP 请求中的相应值列表。headers
Accept
Cache-Control
6.3.6. 必需的依赖项
必需的依赖项由 YAML 中的 property 表示。required
如果在应用程序启动时需要启动其中一个依赖项,则可以设置
YAML 文件中的属性。required: true
如果您的应用程序在引导期间无法本地化所需的依赖项,则会抛出 异常,并且 Spring Context 设置失败。换句话说,您的应用程序不能 如果所需的依赖项未在 Zookeeper 中注册,则启动。
您可以在本文档后面阅读有关 Spring Cloud Zookeeper Presence Checker 的更多信息。
6.3.7. 存根
您可以提供包含依赖项存根的 JAR 的冒号分隔路径,如 如以下示例所示:
stubs: org.springframework:myApp:stubs
哪里:
-
org.springframework
是 .groupId
-
myApp
是 .artifactId
-
stubs
是分类器。(请注意,这是默认值。stubs
Because 是默认分类器,前面的示例等于以下内容
例:stubs
stubs: org.springframework:myApp
6.4. 配置 Spring Cloud Zookeeper 依赖项
您可以设置以下属性来启用或禁用 Zookeeper 依赖项功能的某些部分:
-
spring.cloud.zookeeper.dependencies
:如果不设置此属性,则无法使用 Zookeeper 依赖项。 -
spring.cloud.zookeeper.dependency.loadbalancer.enabled
(默认启用):开启特定于 Zookeeper 的自定义负载均衡策略,包括基于依赖项的负载均衡设置。ZookeeperServiceInstanceListSupplier
RestTemplate
-
spring.cloud.zookeeper.dependency.headers.enabled
(默认启用):此属性注册一个,该属性会自动将相应的标头和内容类型附加到其版本,如 Dependency 配置中所示。 如果没有此设置,这两个参数将不起作用。FeignBlockingLoadBalancerClient
-
spring.cloud.zookeeper.dependency.resttemplate.enabled
(默认启用):启用后,此属性将修改 -annotated 的请求标头,以便它使用依赖项配置中设置的版本传递标头和内容类型。 如果没有此设置,这两个参数将不起作用。@LoadBalanced
RestTemplate