자바 조작 Zookeeper 원리 및 과정 상세 설명
Zookeeper 에서 가장 자주 사용 하 는 장면 은 바로 서비스 생산자 와 서비스 소비 자 를 담당 하 는 등록 센터 이다.서비스 생산 자 는 자신 이 제공 한 서 비 스 를 Zookeeper 센터 에 등록 하고 서비스 소비자 들 은 서비스 호출 을 할 때 먼저 Zookeeper 에서 서 비 스 를 찾 아 서비스 생산자 의 상세 한 정 보 를 얻 은 다음 에 서비스 생산자 의 내용 과 데 이 터 를 호출 합 니 다.다음 그림 에서 보 듯 이 Dubbo 구조 에서 Zookeeper 는 등록 센터 라 는 역할 을 맡 았 다.
maven 의존
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.6.0</version>
</dependency>
프로그램 기타 의존:
<!-- Logger(log4j2) -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.11.2</version>
</dependency>
<!-- Log4j 1.x API Bridge -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-1.2-api</artifactId>
<version>2.11.2</version>
</dependency>
<!-- SLF4J Bridge -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.11.2</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.6.0</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
API 조작 코드:
package com.zhi.test;
import java.util.List;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.data.Stat;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.MethodOrderer;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.api.TestInstance.Lifecycle;
import org.junit.jupiter.api.TestMethodOrder;
/**
* Zookeeper
*
* @author
* @since 2020 5 3 14:31:28
*
*/
@TestInstance(Lifecycle.PER_CLASS)
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class ZookeeperTest {
private final Logger logger = LogManager.getLogger(this.getClass());
private ZooKeeper zooKeeper;
private final String path = "/test";
@BeforeAll
public void init() throws Exception {
zooKeeper = new ZooKeeper("192.168.59.131:2181", 60000, new Watcher() {
public void process(WatchedEvent event) {
logger.info(" :{}, :{}", event.getType(), event.getPath());
}
});
}
/**
* , , 0。 。 <br>
* ,CreateMode:
* <li>PERSISTENT:
* <li>PERSISTENT_SEQUENTIAL: ,
* <li>EPHEMERAL: , (dubbo )
* <li>EPHEMERAL_SEQUENTIAL: ,
* <li>CONTAINER:
* <li>PERSISTENT_WITH_TTL: , ,
* <li>PERSISTENT_SEQUENTIAL_WITH_TTL: , , ,
*/
@Order(1)
@Test
public void create() {
try {
String back = zooKeeper.create(path, " ".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
logger.info(" , :{}", back);
} catch (Exception e) {
logger.error(" create ", e);
}
}
/**
* , null
*/
@Order(2)
@Test
public void exists() {
try {
Stat stat = zooKeeper.exists(path, false);
logger.info(" {} {} ", path, stat == null ? " " : "");
} catch (Exception e) {
logger.error(" exists ", e);
}
}
/**
* ,
*/
@Order(3)
@Test
public void find() {
try {
byte[] bits = zooKeeper.getData(path, false, new Stat()); //
String data = new String(bits);
logger.info(" {} :{}", path, data);
} catch (Exception e) {
logger.error(" getData ", e);
}
}
/**
* , 0 ArrayList
*/
@Order(3)
@Test
public void children() {
try {
List<String> list = zooKeeper.getChildren(path, false);
logger.info(" {} :{}", path, String.join("、", list.toArray(new String[0])));
} catch (Exception e) {
logger.error(" getChildren ", e);
}
}
/**
* , ,
*/
@Order(4)
@Test
public void udpate() {
try {
Stat stat = zooKeeper.exists(path, false);
if (stat != null) {
stat = zooKeeper.setData(path, " ".getBytes(), stat.getVersion()); // -1
logger.info(" , :{}, :{}", stat.getAversion(), stat.getVersion());
}
} catch (Exception e) {
logger.error(" setData ", e);
}
}
/**
* , ,
*/
@Order(5)
@Test
public void delete() {
try {
zooKeeper.delete(path, -1); // -1
logger.info(" path ");
} catch (Exception e) {
logger.error(" delete ", e);
}
}
@AfterAll
public void destory() throws Exception {
if (zooKeeper != null) {
zooKeeper.close();
}
}
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.