384.5. zookeeper 지원 경로 정책

zookeeper는 상자에서 매우 간단하고 효과적인 리더 선택을 할 수 있습니다. 이 구성 요소는 RoutePolicy 에서 이 선택 기능을 악용하여 경로 활성화 시기와 방법을 제어합니다. 이 정책은 일반적으로 Camel 기반 서버 클러스터에서 경로의 동일한 인스턴스를 제어하기 위해 장애 조치 시나리오에서 사용됩니다. 매우 일반적인 시나리오는 클러스터에 분산된 경로의 여러 인스턴스가 있지만 마스터 중 하나만 한 번에 실행해야 하는 간단한 'Master-Slave' 설정입니다. 마스터가 실패하면 사용 가능한 슬레이브에서 새 마스터를 선택하고 이 새 마스터의 경로를 시작해야 합니다.

이 정책은 선거에 참여할 RoutePolicy 의 모든 인스턴스에서 공통 znode 경로를 사용합니다. 각 정책은 이 노드에 ID를 쓰고 Zookeeper는 쓰기를 수신한 순서대로 정렬합니다. 그런 다음 정책은 노드 목록을 읽고 ID의 위치를 확인합니다. 이 위치는 경로를 시작해야 하는지 여부를 결정하는 데 사용됩니다. 정책은 클러스터 전체에서 시작해야 하는 경로 인스턴스 수와 목록의 위치가 이 값보다 작으면 해당 경로가 시작됩니다. 마스터 슬레이브 시나리오의 경우 경로는 경로 1개로 구성되며 목록의 첫 번째 항목만 경로를 시작합니다. 모든 정책은 목록에 대한 업데이트를 조사하고 목록 변경 사항이 경로 시작 여부를 다시 계산하는지 확인합니다. Zookeeper의 리더 선택 기능에 대한 자세한 내용은 이 페이지 를 참조하십시오.

다음 예제에서는 선택 항목에 대해 노드 /someapplication/somepolicy 를 사용하며 노드 목록 (i.e.)에서 최상위 '1' 항목만 시작하도록 설정됩니다.

ZooKeeperRoutePolicy policy = new ZooKeeperRoutePolicy("zookeeper:localhost:39913/someapp/somepolicy", 1);
from("direct:policy-controlled")
    .routePolicy(policy)
    .to("mock:controlled");

현재 구성 요소에는 다음과 같은 3가지 정책이 정의되어 있으며, 서로 다른 SLA가 있습니다.

  • ZooKeeperRoutePolicy
  • CuratorLeaderRoutePolicy (since 2.19)
  • MultiMasterCuratorLeaderRoutePolicy (since 2.19)

ZooKeeperRoutePolicy 는 여러 활성 노드를 지원하지만 Camel 구성 요소 및 해당 소비자가 이미 시작된 후에만 활성화됩니다. 이는 경로 정의에 따라 구성 요소가 이미 이벤트 사용을 시작하고 'Exchange'를 생성할 수 있는 위험으로 인해 노드가 활성화되지 않도록 할 수 있습니다.

CuratorLeaderRoutePolicy 는 단일 활성 노드만 지원하지만 다른 CamelContext 라이프사이클 방법에 바인딩되어 있습니다. 이 정책은 경로 또는 소비자가 시작되기 전에 시작되므로 정책이 결정되기 전에는 아무 것도 처리할 수 있습니다.

MultiMasterCuratorLeaderRoutePolicy 는 여러 활성 노드를 지원하며 CuratorLeaderRoutePolicy 와 동일한 라이프사이클 메서드에 바인딩됩니다. 이 정책은 모든 경로 또는 소비자가 시작되기 전에 시작되므로 정책이 결정되기 전에 처리되지 않을 수 있습니다.