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