Zookeeper服务注册与发现


简介: 官方文档上这么解释zookeeper,它是一个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。

Zookeeper服务注册与发现

Zookeeper是什么

官方文档上这么解释zookeeper,它是一个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。

上面的解释有点抽象,简单来说zookeeper=文件系统+监听通知机制。

在这里插入图片描述


sequenceDiagram

Zookeeper-->>作用:Zookeeper是一个分布式协调工具,可以实现注册中心的功能 Zookeeper-->>作用:取代Eureka服务器,zk作为服务注册中心
  • CAP理论指出,一个分布式系统不可能同时满足C(一致性)、A(可用性)和P(分区容错性)。
    由于分布式系统中必须保证分区容错性,因此我们只能在A和C之间进行权衡。

Zookeeper保证的是CP, 而Eureka则是保证AP。

使用docker启动Zookeeper:
#拉取Zookeeper镜像
docker pull zookeeper

#启动Zookeeper
docker run --name zk01 -p 2181:2181 --restart always -d zookeeper 

Zookeeper容器

默认已经帮我们启动了服务端和客户端,如果想进去容器的话,使用下面的命令。

#查看正在运行的容器(查看Zookeeper容器的id)
docker ps

#进入zookeeper容器
docker exec -it 容器ID /bin/bash

#退出容器
exit
#启动容器
docker start 容器ID
#关闭容器
docker stop 容器ID

1.新建Maven子工程 引入pom

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
</dependency>

2.编写yml

#端口号
server:
  port: 8004 spring: application: #服务别名——注册到zookeeper注册中心的名称 name: cloud-provider-payment cloud: zookeeper: connect-string: 10.211.55.17:2181 #linux的ip加暴露的端口号 

3.主启动类增加注解

@EnableDiscoveryClient //该注解用于向使用consul或者Zookeeper作为注册中心时注册服务 @SpringBootApplication

4.编写 controller 调用

@Slf4j @RestController public class PaymentController { @Value("${server.port}") //获取端口号 private String serverPort; @RequestMapping("/payment/zk") public String paymentzk(){ return "springcloud with zookeeper:" + serverPort + "\t" + UUID.randomUUID().toString(); } } 

启动8004项目,浏览器输入http://localhost:8004/payment/zk

在这里插入图片描述
消费者

@RestController @Slf4j public class OrderZKController { public static final String INVOKE_URL = "http://cloud-provider-payment"; @Resource private RestTemplate restTemplate; @RequestMapping("/consumer/payment/zk") public String paymentInfo(){ String result = restTemplate.getForObject(INVOKE_URL + "/payment/zk", String.class); return result; } }

在这里插入图片描述


服务节点是临时节点还是持久节点?

zookeeper也是有心跳机制,在一定时间能如果一直没心跳返回,Zookeeper就会把服务节点剔除掉。所以在Zookeeper上的服务节点是临时节点。

 

转自:https://developer.aliyun.com/article/770763?spm=a2c6h.12873581.0.0.295b767ds75lS6&groupCode=othertech


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM