注册中心Zookeeper
zookeeper是一个分布式协调工具 可以实现注册中心功能
使用Docker安装zookeeper
- 拉取zk镜像
docker pull zookeeper:3.4.9
- 创建容器
docker create --name zk -p 2181:2181 zookeeper:3.4.9
- 启动容器
docker start zk
- 查看zk是否启动成功
docker logs zk
,查看到binding to port 0.0.0.0``/0``.0.0.0:2181
即成功
将微服务注册进Zookeeper
引入依赖
需要排除spring-cloud-starter-zookeeper-discovery自带的zookeeper依赖版本,引入和主机zookeeper版本相同的依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--SpringBoot整合Zookeeper客户端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
<exclusions>
<!--先排除自带的zookeeper3.5.3-->
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--添加zookeeper3.4.9版本-->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.14</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</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>
配置文件
server:
# 8004表示注册到zookeeper服务器的服务提供者端口号
port: 8004
spring:
application:
# 服务别名---注册zookeeper到注册中心的名称
name: cloud-provider-payment
cloud:
zookeeper:
# 服务器IP地址:2181
connect-string: 192.168.56.10:2181
主启动类
添加上 @EnableDiscoveryClient开启服务注册与发现功能
@EnableDiscoveryClient和@EnableEurekaClient的区别:
简单区分下,他们在功能上是一致的:写在启动类的上,开启服务注册发现功能。不同的是,当注册中心不一样时,像:eureka、consul、zookeeper,使用是也有了区别。EnableDiscoveryClient注解在common包中,通过项目的classpath来决定使用哪种实现,而EnableEurekaClient注解在netflix包中,只会使用eureka这种实现方式;所以,使用EnableDiscoveryClient,对任何注册中心都适用。而EnableEurekaClient是为eureka服务的。springcloud的Dalston或更早期的版本EnableEurekaClient是包含EnableDiscoveryClient注解的,这种情况使用什么已经没区别了。
查看是否入住
进入zookeeper的docker容器docker exec -it zk /bin/bash
连接进zookeeper的客户端./bin/zkCli.sh
临时持久节点
当把微服务停掉以后,zookeeper不会立即把微服务从服务注册表中剔除,而是在接收不到心跳的一定时间内再剔除,因此属于临时节点