385.5. Zookeeper 활성화 경로 정책
Zookeeper는 상자에서 매우 간단하고 효과적인 리더 선택을 허용합니다. 이 구성 요소는 RoutePolicy 에서 이 선택 기능을 악용하여 경로 활성화 시기와 방법을 제어합니다. 이 정책은 일반적으로 Camel 기반 서버 클러스터 전체에서 동일한 경로 인스턴스를 제어하기 위해 장애 조치 시나리오에서 사용됩니다. 매우 일반적인 시나리오는 클러스터에 분산된 경로의 인스턴스가 여러 개 있지만 마스터 중 하나만 동시에 실행되어야 하는 간단한 '마스터-슬레이브' 설정입니다. 마스터가 실패하면 사용 가능한 슬레이브에서 새 마스터를 선택해야 하며 이 새 마스터의 경로를 시작해야 합니다.
이 정책은 선택과 관련된 RoutePolicy 의 모든 인스턴스에서 공통 znode 경로를 사용합니다. 각 정책은 해당 ID를 이 노드에 쓰고 Zookeeper는 쓰기를 수신한 순서대로 순서대로 정렬합니다. 그러면 정책에서 노드 목록을 읽고 해당 ID의 위치를 확인합니다. 이 위치는 경로를 시작해야 하는지 여부를 결정하는 데 사용됩니다. 정책은 클러스터에서 시작해야 하는 경로 인스턴스 수를 사용하여 시작 시 구성되며 목록의 위치가 이 값보다 작으면 경로가 시작됩니다. Master-slave 시나리오의 경우 경로는 1 경로 인스턴스로 구성되며 목록의 첫 번째 항목만 경로를 시작합니다. 모든 정책은 목록에 대한 업데이트를 감시하고 목록이 변경되는 경우 경로가 시작되어야 하는 경우 다시 계산됩니다. Zookeeper의 리더 선택 기능에 대한 자세한 내용은 이 페이지를 참조하십시오.
다음 예제에서는 선택 사항에 /someapplication/somepolicy 노드를 사용하며 노드 목록에서 최상위 '1' 항목만 시작하도록 설정되어 있습니다. 즉, 마스터를 선택합니다.
ZooKeeperRoutePolicy policy = new ZooKeeperRoutePolicy("zookeeper:localhost:39913/someapp/somepolicy", 1);
from("direct:policy-controlled")
.routePolicy(policy)
.to("mock:controlled");
현재 구성 요소에는 SLA가 다른 세 가지 정책이 정의되어 있습니다.
-
ZooKeeperRoutePolicy -
CuratorLeaderRoutePolicy(since 2.19) -
MultiMasterCuratorLeaderRoutePolicy(since 2.19)
Zoo Cryostat RoutePolicy 는 여러 활성 노드를 지원하지만 Camel 구성 요소와 해당 소비자가 이미 시작된 후에만 활성화가 시작되므로 경로 정의에 따라 정책이 활성화되지 않도록 정책을 활성화하기 전에 이벤트 사용을 시작하고 'Exchange'를 생성할 수 있는 위험이 도입되었습니다.
CuratorLeaderRoutePolicy 는 하나의 활성 노드만 지원하지만 다른 CamelContext 라이프사이클 방법에 바인딩됩니다. 이 정책은 경로 또는 소비자가 시작되기 전에 시작되므로 정책에서 결정을 수행하기 전에는 처리되지 않도록 할 수 있습니다.
MultiMasterCuratorLeaderRoutePolicy 는 여러 활성 노드를 지원하며 CuratorLeaderRoutePolicy 와 동일한 라이프사이클 방법에 바인딩됩니다. 이 정책은 경로 또는 소비자가 시작되기 전에 시작되므로 정책에서 결정을 받기 전에는 처리되지 않도록 할 수 있습니다.