2016-11-24 2 views
1

순차적 임시 자식이있는 영구 노드가있는 경우 모든 자식 노드가 없어 졌을 때 시퀀스를 재설정 할 수 있습니까?사육사 재설정 순차 번호

내가 달성하고자하는 것 :

  1. 첫 번째 순서 임시 노드를 작성 : [노드 00..01]
  2. 당신이 만든 2 일 : [노드 00..01을, 노드 - 00..02]
  3. 세 번째 노드를 만듭니다. [node-00..01, node-00..02, node-00.003]
  4. 두 번째 노드는 죽습니다. [node-00..01 , 노드 00.003]
  5. 다른 순차 자식을 만듭니다. [node-00..01, node-00..03, node-00.004]

그래서 사람이 죽으면, 다음 하나는 격차를 기입하지해야하지만, 모든 자식 노드가 죽을 때, 나는 재설정하는 순서를 원하는, 내가 다시 아이 노드를 작성하는 경우가에서 시작한다 처음.

이것이 가능합니까? Java에서.

+0

실제 요구 사항은 무엇입니까? 분산 된 시퀀스 번호가 필요하거나 실제로 자식 노드가 틈없이 존재하기를 원하십니까? –

답변

1

작성 모드 CONTAINER으로이 작업을 수행 할 수 있습니다. 하위 노드가 없으면 컨테이너는 자동으로 제거됩니다.

순차적 임시 노드를 만들 때 다음 방법을 사용하십시오. 여기에 어떻게됩니까

curatorFrameworkInstance.create() 
.creatingParentContainersIfNeeded() 
.withMode(CreateMode.PERSISTENT_SEQUENTIAL) 
.forPath("/<some_path>/<parentNode>/<sequential_path_prefix>"); 

는 존재하지 않는 경우 큐레이터가 컨테이너로 부모 ZNode <parentNode>을 만들 것입니다. 그리고 순차적 노드를 만들 것입니다. 이것은에서 1에서 5까지 설명 된 예상되는 동작입니다. 모든 어린이가 사망하면 부모 ZNode도 사망합니다. 자식을 다시 만들려고하면 creatingParentContainersIfNeeded() 절이 부모 컨테이너가 다시 만들어 졌는지 확인합니다.

자세한 내용은 CreateMode.CONTAINER의 설명서입니다.

znode는 컨테이너 노드입니다. 컨테이너 노드는 리더, 잠금 장치 등과 같은 요리법에 유용한 특수 목적 노드입니다. 컨테이너의 마지막 하위 노드가 삭제되면 향후 컨테이너의 일부 지점에서 컨테이너가 삭제 될 수 있습니다. 이 속성을 감안할 때,이 컨테이너 노드 내부에서 자식을 생성 할 때 KeeperException.NoNodeException을 얻을 준비가되어 있어야합니다.

참고 : 나는 당신의 질문보다는 직접 ZooKeeper Client를 사용하여 답변을 Apache Curator Framework을 사용했다.