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是默认分类器。

配置Spring Cloud Zookeeper依赖关系

有一些属性可以设置为启用/禁用Zookeeper依赖关系功能的部分。

spring.cloud.zookeeper.dependencies- 如果您不设置此属性,则不会从Zookeeper依赖关系中受益

spring.cloud.zookeeper.dependency.ribbon.enabled(默认情况下启用) -  Ribbon需要显式的全局配置或特定的依赖关系。通过打开此属性,运行时负载平衡策略解决是可能的,您可以从Zookeeper依赖关系的loadBalancerType部分获利。需要此属性的配置具有LoadBalancerClient的实现,委托给下一个子弹中的ILoadBalancer

spring.cloud.zookeeper.dependency.ribbon.loadbalancer(默认情况下启用) - 感谢这个属性,自定义ILoadBalancer知道传递给Ribbon的URI部分实际上可能是必须被解析为Zookeeper。没有此属性,您将无法在嵌套路径下注册应用程序。

spring.cloud.zookeeper.dependency.headers.enabled(默认情况下启用) - 此属性注册这样的一个RibbonClient,它会自动附加适当的头文件和内容类型,其中包含依赖关系配置中显示的版本。没有这两个参数的设置将不会运行。

spring.cloud.zookeeper.dependency.resttemplate.enabled(默认情况下启用) - 启用时将修改@LoadBalanced注释的RestTemplate的请求标头,以便它通过依赖关系配置中设置的版本的标题和内容类型。Wihtout这两个参数的设置将无法运行。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容