주키퍼에서는 특정노드의 변화(생성,데이터수정,자식노드의 추가/제거, ACL변경) 을 알 수 있다.
폴링방식을 취할 경우, 지속적인 커넥션비용 혹은 반응시간에 문제가 있을 수 있다.
그래서 주키퍼에서는 메시지 이벤트 방식을 사용한다. 이것은 watcher 를 구현해서 쓸 수 있다.
왓쳐의 process 함수를 구현해주는데 아래의 event type 으로 상태를 구별할 수 있게 구현되어있다.
해당 process 라는 함수는 clientcnx 클래스의 쓰레드에서 호출 하게 된다.
커넥션 정보등을 노드에 저장하고 해당 장비가 장애로 인해 커넥션이 끊어지면 해당 노드가 빠짐으로써 해당 이벤트를 체크해 다른 장비쪽으로 request 를 할 수 있겠다.
폴링방식을 취할 경우, 지속적인 커넥션비용 혹은 반응시간에 문제가 있을 수 있다.
그래서 주키퍼에서는 메시지 이벤트 방식을 사용한다. 이것은 watcher 를 구현해서 쓸 수 있다.
왓쳐의 process 함수를 구현해주는데 아래의 event type 으로 상태를 구별할 수 있게 구현되어있다.
해당 process 라는 함수는 clientcnx 클래스의 쓰레드에서 호출 하게 된다.
커넥션 정보등을 노드에 저장하고 해당 장비가 장애로 인해 커넥션이 끊어지면 해당 노드가 빠짐으로써 해당 이벤트를 체크해 다른 장비쪽으로 request 를 할 수 있겠다.
public enum EventType { None (-1), NodeCreated (1), NodeDeleted (2), NodeDataChanged (3), NodeChildrenChanged (4); private final int intValue; // Integer representation of value // for sending over wire EventType(int intValue) { this.intValue = intValue; } public int getIntValue() { return intValue; } public static EventType fromInt(int intValue) { switch(intValue) { case -1: return EventType.None; case 1: return EventType.NodeCreated; case 2: return EventType.NodeDeleted; case 3: return EventType.NodeDataChanged; case 4: return EventType.NodeChildrenChanged; default: throw new RuntimeException("Invalid integer value for conversion to EventType"); } } } } abstract public void process(WatchedEvent event);왓쳐의 구현
public class testWatcher implements Watcher { public void process(WatchedEvent event) { if( event.getType() == Event.EventType.NodeCreated || event.getType() == Event.EventType.NodeDeleted || event.getType() == Event.EventType.NodeDataChanged || event.getType() == Event.EventType.NodeChildrenChanged ) { try { if( event.getType() == Event.EventType.NodeChildrenChanged ){ 하위노드의 변경(노드생성, 삭제등등) 후 할 작업 코드~ } } catch (KeeperException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } }
'프로그래밍 > zookeeper' 카테고리의 다른 글
[ZOOKEEPER] zookeeper 소스 분석 -1 (0) | 2015.08.23 |
---|