如何正确使用Spring Cloud Zookeeper,不懂来学
Posted jinggege795
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何正确使用Spring Cloud Zookeeper,不懂来学相关的知识,希望对你有一定的参考价值。
使用Spring Cloud Zookeeper
Spring Cloud支持作为微服务架构一部分的各种产品。 例如,在阅读本章过程中,开发人员可以将Consul与作为发现工具的Eurcka进行比较,也可以将Consul与作为分布式配置工具的Spring Cloud Config进行比较,通过这种比较,可以对Spring Cloud所支持产品的丰富性有更加深刻的认识。Zookeeper是另一种解决方案,它可以作为之前列出的产品的替代选择。与Consul 一样,它可用于服务发现和分布式配置。要在项目中启用Spring Cloud Zookeeper, 应该包含用于服务发现功能的spring cloud-starter. zookeeper-discovery启动器,或用于配置服务器功能的spring-cloud-starter-zookeeper config启动器。
或者,开发人员也可以声明一个spring- cloud-starter zookeeper-all依赖项,它可以激活应用程序的所有功能。当然,也不要忘记包含spring boot starter-web,因为它仍然需要提供Web功能。
<dependency>
<groupId>org. springframework. cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-all</atifactId>
</ dependency>
<dependency>
<groupId>org.springframework,boot</groupId>
<arti factId>spring-boot-starter-web</artifactId>
</dependency>
Zookeeper连接设置是自动配置的。默认情况下,客户端会尝试连接到localhost:2181.要覆盖它,应该使用当前服务器网络地址定义spring.cloud zookeeper cnct-string属性。
spring:
cloud:
zookeeper:
connect-string: 192.168.99.100:2181
与Spring Cloud Consul-一样, Zookeeper 支持Spring Cloud Netlix提供的所有最流行的通信库,如Feign、 Ribbon、 Zuul 或Hystrix。在开始处理示例实现之前,开发人员必须先启动Zookeeper实例。
运行 Zookeeper
为简便起见,可以使用Docker镜像在本地计算机上启动Zookeeper.以下命令将启动Zookeeper服务器实例。由于它有快速失败(Fails Fast)机制,所以最好的方法是始终重新启动它。
docker run -d --name zookeeper --restart always -P 2181:2181 zookeeper
与先前讨论的在此领域的解决方案( 如Consul或Eureka)相比,Zookeeper 没有提供简单的方便开发人员管理的RESTful API或Web管理控制台。它有一个用于Java和C语言的官方API绑定。开发人员也可以使用它的命令行接口,它可以在Docker容器中轻松启动。以下命令将启动带有命令行客户端的容器,并可将其链接到Zookeeper服务器容器。
docker run -it --rm --link zookeeper : zookeeper zookeeper zkCli.sh - server
zookeeper
Zookeeper CLI允许执行一些有用的操作,如下所示。
口创建znode:要使用给定路径创建znode,可以使用命令create/path/data。
口获取数据:命令get/path将返回与znode关联的数据和元数据。
口观察更改的 znode:如果znode或znode的子数据发生更改,则显示通知。观察只能使用get命令设置。
口设置数据:要设置znode数据,可以使用命令set/path/data。
口创建znode的子代:此命令与用于创建单个znode的命令类似。唯一的区别是子znode的路径将包括父路径。其命令格式为create /parent /path /subnode /path /data。
口列出znode的子节点:可以使用ls /path命令显示它。
口检查状态:可以使用stat /path命令检查。状态将描述指定znode的元数据,如时间戳或版本号。
口删除/刪除 znode: mr /path命令可以删除znode及其所有子节点。
请注意,术语Zookeeper节点(znode)在这里是首次出现。在存储数据时,Zookeeper将使用树结构,其中每个节点称为znode.这些znode的名称基于从根节点获取的路径。每个节点都有一个名称。可以使用从根节点开始的绝对路径访问它。此概念类似于Consul文件夹,并已用于在键/值存储中创建键。
服务发现
Apache Zookeeper最流行的Java客户端库是Apache Curator.它提供了一个API框架和实用程序,使Apache Zookeeper的应用变得更加容易。它还包括常见用例和扩展,如服务发现或Java 8异步DSL. Spring Cloud Zookeeper可以利用一个这样的扩展来实现服务发现。Spring Cloud Zookeeper对Curator库的使用对于开发人员来说是完全透明的,所以在这里就不必做更多的介绍。
1.客户端实现
客户端的用法与其他服务发现相关的SpringCloud项目相同。应用程序的main类或@Configuration类应使用@EnableDiscoveryClient注解。默认的服务名称、实例ID和端口分别取自spring application.name. Spring Context ID和server.port.示例应用程序源代码位于GitHub存储库tp:/github.com/piomin/sample-spring-cloud- zookeeper.git)中。从根本上说,除了Spring Cloud Zookeeper Discovery依赖项之外,它与为Consul引入示例系统没有什么不同。它仍然由4个微服务组成,这些微服务之间可以相互通信。现在,在克隆存储库之后,可以使用mvn clean install 命令构建它。然后使用java jar命令运行具有活动配置文件名称的每个服务,如java jar -spring profiles active zonel order-service/target/order- service-1.0-SNAPSHOT.jar.
可以使用CLI命令Is和get查看已注册服务和实例的列表。默认情况下,Spring Cloud Zookeeper会注册/services根文件夹中的所有实例。它可能会被spring cou.ooceeper.discovery.root属性覆盖,如图10.9 所示。
2. Zookeeper 依赖项
Spring Cloud Zookeeper还有一个名为Zookeeper依赖项(ookeeper Dependencies)的附加功能。这里的依赖项应理解为在Zookeeper中注册的其他应用程序,这些应用程序通过Feign客户端或Spring RestTemplate调用。可以将这些依赖项作为应用程序的属性提供。在将spring-cloud-starter zookeeper discovery启动器包含到项目中之后,可以通过自动配置启用该功能。当然,也可以通过将spring.cloud.zookeeper .dependency .enabled属性设置为false来禁用它。
Zookeeper依赖项机制的配置随着spring cloud.zookeeper.dependencies.*属性一起提供。以下是来自order-service 服务的bootstrap.yml文件的片段。此服务可与所有其他可用服务集成。
spring:
application:
name: order-service
cloud:
zookeeper :
connect-string: 192 .168.99.100:2181
dependency:
resttemplate:
enabled: false
dependencies:
account :
path: account- service
loadBalancerType: ROUND ROBIN
required: true
customer :
path: customer-service
loadBalancerType: ROUND ROBIN
required: true
product:
path: product- service
loadBalancerType: ROUND ROBIN
required: true
现在来仔细看一看前面的配置。每个被调用服务的roo属性是别名,然后可以由Feign客户端或@LoadBalanced RestTemplate用作服务名称。
@FeignClient (name = "customer")
public interface CustomerClient {
@GetMapping ("/wi thAccounts/ {customerId}")
Customer findByI dWithAccounts (@Pathvariable ("customerId") Long
customerId);
}
配置中的下一个非常重要的字段是路径。它设置在Zookeeper中注册依赖项的路径。因此,如果该属性具有的值为customer -service,则意味着Spring Cloud Zookeeper会尝试在路径
/services/customer-service下查找相应的服务znode.还有一些其他属性可以自定义客户端的行为。其中之一是 loadBalancerType,用于应用负载均衡策略。开发人员可以在3种可用策略之间选择一 :ROUND_ _ROBIN、RANDOM和STICKY。还可以为每个服务映射将required属性设置为true。现在,如果应用程序在引导期间无法检测到所需的依赖项,则无法启动。Spring Cloud Zookeeper 依赖项还允许管理API 版本(属性contentTypeTemplate和versions)和请求标头(headers 属性)。
默认情况下,Spring Cloud Zookeeper允许RestTemplate与依赖项进行通信。在分支依赖项
tps:/ithub.com/piomin/sample-spring-cloud- zoeeper/ree/dependencies)提供的示例应用程序中,我们使用了Feign客户端而不是@LoadBalanced RestTemplate。为了禁用该功能,应该将属性springcloud.zokeper. dependency rsttemplate enabled设置为false.
分布式配置
Zookeeper的配置管理与Spring Cloud Consul Config的配置管理非常相似。默认情况下,所有属性源都存储在/config 文件夹(或Zookeeper术语中的znode)中。如前文所述,假设在bootstrap.yml文件中将spring application.name属性设置为order-service,并将springprofiles.active运行参数设置为zonel, 那么它会尝试按以下顺序查找属性源:confg/order-service、zonel/、 config/order-service/ 、configapplication. zone1/、 config/application/。存储在命名空间中具有configapplication前缀的文件夹中的属性可用于使用Zookeeper进行分布式配置的所有应用程序。
要访问示例应用程序,需要切换到http:/ihbco/piomin/sample -spring- cloud-zookeeper.git存储库中的分支配置。本地application.yml或botstrap.yml文件中定义的配置如下所示,现已移至Zookeeper.
---
spring:
profiles: zonel
server:
port: $ (PORT:8090 }
---
spring:
profiles: zone2
server:
port: ${PORT:9090}
必须使用CLI创建所需的znode。如图10.10所示的是使用给定路径创建znode的Zookeeper命令列表,这里使用了create /path /data命令。
小结
本章介绍了两个Spring Cloud项目的主要功能一Consul 和Zookeeper.虽然本章的重点不是Spring Cloud功能,但也提供了有关如何启动、配置和维护其工具实例的说明。本章讨论了更高级的方案,如使用Docker设置由众多成员组成的集群。在这些方案中,开发人员有机会看到Docker作为开发工具的真正威力。它允许开发人员只使用3个简单命令初始化一个由3个成员组成的集群,而无需任何其他配置。
在使用Spring Cloud时,Consul 似乎是Eureka作为发现服务器的重要替代品,而对于Zookeeper则不能作如是观。读者可能已经注意到了,本章对于Consul的介绍篇幅要多于Zookeeper. 此外,Spring Cloud仅将Zookeeper 视为第二选择,因为与Spring Cloud Consul相比,Zookeeper仍然没有分区机制或观察实现的配置更改功能。Consul是一种现代解决方案,旨在满足最新架构的需求,如基于微服务的系统:而Zookeper是一种键/值存储,用作在分布式环境中运行的应用程序的服务发现工具。但是,如果在系统中使用Apache Foundation堆栈,则值得考虑使用此工具。由于这一点的存在, 开发人员可以利用Zookeeper与其他Apache组件(如Camel或Karaf)之间的集成,轻松发现使用SpringCloud框架创建的服务。
总而言之,在阅读完本章之后,开发人员应该能够在基于微服务的架构中使用Spring Cloud Consul和Spring Cloud Zookeeper的主要功能。开发人员还应该了解Spring Cloud中所有可用发现和配置工具的主要优点和缺点,以便为系统选择最合适的解决方案。
觉得文章不错的朋友可以转发此文关注小编,有需要的可以扫码下方获取;
以上是关于如何正确使用Spring Cloud Zookeeper,不懂来学的主要内容,如果未能解决你的问题,请参考以下文章
如何正确使用Spring Cloud Zookeeper,不懂来学
使用 feign 和 spring cloud kubernetes 的正确方法是啥?
与当前 Spring Boot 2.0.0M3 一起使用的正确 Spring Cloud 版本是啥
如何构建 Spring Cloud Stream JMS ActiveMQ