프로그래밍/zookeeper 2015. 10. 18. 22:56
주키퍼에서는 특정노드의 변화(생성,데이터수정,자식노드의 추가/제거, ACL변경) 을 알 수 있다.
폴링방식을 취할 경우, 지속적인 커넥션비용 혹은 반응시간에 문제가 있을 수 있다.
그래서 주키퍼에서는 메시지 이벤트 방식을 사용한다. 이것은 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
//