zookeeper 분포식 재해 수용 코드 예시
import java.net.InetAddress;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.EventType;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;
public class ClusterTest {
static ZooKeeper zk = null;
static Map<String, Watcher> myWatchMap = new HashMap<String, Watcher>();
static String ip = null;
public static void init() throws InterruptedException {
for(int i = 1; i < 6; i++){
final int k = i;
Thread t = new Thread(new Runnable() {
@Override
public void run() {
//
try {
ZooKeeper zk = new ZooKeeper(
"localhost:2181,localhost:2182", 1000, null);
String path = ip+k;
if(zk.exists(path, false) == null){
zk.create(path, "testRootData".getBytes(), Ids.OPEN_ACL_UNSAFE,
CreateMode.EPHEMERAL);
}
Thread.sleep(1000);
zk.close();
} catch (Exception e) {
// e.printStackTrace();
}
}
});
t.start();
t.setName("RISHENG-THREAD-"+i);
}
}
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
InetAddress addr = InetAddress.getLocalHost();
ip="/zookeeper/"+addr.getHostAddress();
//
zk = new ZooKeeper("localhost:2181,localhost:2182",
1000, null);
List<String> nodeList = zk.getChildren("/zookeeper", false);
System.err.println(nodeList);
init();
regWatch();
while(true){
Thread.sleep(1000);
init();
regWatch();
}
}
public static void regWatch() throws KeeperException, InterruptedException{
for(int i = 1; i < 6; i++){
String path = ip+i;
Watcher watch = null;
if(!myWatchMap.containsKey(path)){
watch = new MyWatch(zk, path);
myWatchMap.put(path, watch);
}
zk.exists(path, watch);
}
}
}
class MyWatch implements Watcher{
private ZooKeeper zk = null;
private String path = null;
public MyWatch(ZooKeeper zk, String path){
this.zk = zk;
this.path = path;
}
@Override
public void process(WatchedEvent event) {
if(EventType.NodeDeleted.equals(event.getType())){
System.err.println(event.getPath()+"==== ===="+path);
} else if(EventType.NodeCreated.equals(event.getType())){
System.out.println(event.getPath()+"==== ===="+path);
}
try {
zk.exists(event.getPath(), this);
} catch (KeeperException e) {
} catch (InterruptedException e) {
}
}
}
주목해야 할 사항은 다음과 같습니다.
1. 중복된 new 새 Watcher는 구독자가 알림을 중복적으로 받을 수 있습니다.
2. zk의 Watcher는 일회성 소비이기 때문에 사용한 후에 다시 등록하는 것을 기억해야 한다.
3. zk는 통지 관계의 시종 이력서를 보장하지 않기 때문에 Watcher를 조회하여 등록해야 한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
zookeeper JAVA APIzookeeper JAVA API을 이용한 znode 생성 / 읽기 / 삭제 및 쓰기 zookeeper Java 바인딩을 구성하는 패키지는 org.apache.zookeeper 와 org.apache.zookeepe...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.