一、简介
- 众所周知,ZK是一个文件系统类型的数据存储服务。通过节点的不同特性,可以实现服务注册、分布式锁等操作。
- 通过ZK的临时节点,可以实现服务的注册。当服务实例掉线之后,实例也会自动消失。因此,这是一个CP(强一致性、分区容错性),丢弃A(高可用)的操作。
- 上一章已经介绍了Eureka注册中心,ZK作为注册中心的操作也很类似。比较可惜的是,ZK只是一个“数据库”,没办法通过网页监控,只能通过客户端看节点信息。
- 至于Zookeeper的安装、操作、集群布置,专栏里面都有介绍
一、集群版注册中心
1. 开启zookeeper集群
2. 注册
2.1 导包
- 最重要的肯定是
spring-cloud-starter-zookeeper-discovery,这是zookeeper注册服务的关键。
- 值得一提的是,该starter携带的zookeeper版本有可能与服务器的zookeeper版本不一致,在运行的过程中导致异常。可以按照以下的方法,通过
<exclusion>排除原始的zk,然后自己再加一个与zk服务器版本一致的<dependency>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
<exclusions>
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.10</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
2.2 配置文件
- 在
connect-string上,集群有多少zk服务器,就写多少地址
server:
port: 8004
spring:
application:
name: cloud-payment-service
cloud:
zookeeper:
connect-string: 192.168.233.137:2181,192.168.233.131:2181,192.168.233.132:2181
2.3 主启动类
- 通过注解
@EnableDiscoveryClient就相当于在注册中心上注册了。
@SpringBootApplication
@EnableDiscoveryClient
public class PaymentMain8004 {
public static void main(String[] args) {
SpringApplication.run(PaymentMain8004.class,args);
}
}
2.4 查看节点
- 可在zk客户端上看到,目前已经注册的服务。目测该节点应该是持久节点。

- 也可以查看当前服务下的实例。该节点是临时节点,实例掉线就消失了。可见,该节点保存了很多实例的信息。

{
"name":"cloud-payment-service",
"id":"8f7df390-13a2-4d39-b5d6-0930dbcaf860",
"address":"localhost",
"port":8004,
"sslPort":null,
"payload":{
"@class":"org.springframework.cloud.zookeeper.discovery.ZookeeperInstance",
"id":"application-1",
"name":"cloud-payment-service",
"metadata":{
}
},
"registrationTimeUTC":1621597527900,
"serviceType":"DYNAMIC",
"uriSpec":{
"parts":[
{
"value":"scheme",
"variable":true
},
{
"value":"://",
"variable":false
},
{
"value":"address",
"variable":true
},
{
"value":":",
"variable":false
},
{
"value":"port",
"variable":true
}
]
}
}