2016-10-06 3 views
0

WSO2ESB 클러스터 (ESB1 및 ESB2 작업자)가 있고 공유 데이터베이스 MSSQL (MB1 및 MB2 중개자)을 사용하여 WSO2MB 클러스터를 구성하고 있습니다. ESB 서버는 WSO2MB 클러스터의 브로커로부터 메시지를 읽고 읽습니다. 내가 원하는 것은 ESB1이 브로커 MB1에 메시지를 읽고 쓰고, ESB2가 브로커 MB2에 메시지를 읽고 쓰는 것입니다. 예를 들어 MB2에 실패하면 두 ESB 서버가 모두 MB1에 대한 메시지 읽기/쓰기를 수행합니다. 문서에서 나는 실패 전략의 라운드 로빈 버전 만 볼 수 있습니다. ESB 서버가 MB 브로커에 무작위로 연결된다는 의미입니다. 싱글 브로커 (singlebroker) 전략이 있지만 내 상황에 적용 할 수 있습니까? 아니면 자체 FailoverMethod 인터페이스를 구현해야합니까? 우선 순위 또는 체중 기반 장애 조치 전략이 필요하며 ActiveMQ에서만 볼 수 있습니다. 모든 회신에는 Thnx입니다.WSO2 ESB에서 Message Broker 로의 장애 조치

답변

0

라운드 로빈은 브로커에 연결하는 임의의 알고리즘이 아닙니다. 브로커 우선 순위는 broker list에서 처음부터 끝까지 우선합니다. 구성 가능한 "주기 수", "재시도", "연결 지연"속성을 사용하여 우선 순위가 낮은 브로커에 대한 재시도를 최소화 할 수 있습니다. wso2 mb에는 위의 구성을 통해 비슷한 동작을 시도 할 수있는 순간에 가중치 적용 전략이 없습니다.

브로커 우선 순위 지정 (가중치 페일 오버 전략)은 유즈 케이스가 아닌 2 노드 브로커 클러스터에서 알 수 있습니다. 예를 들어, MB1이 작동 중지 된 경우 페일 오버에 사용할 수있는 옵션은 MB2 뿐이며 그 반대의 경우도 마찬가지입니다. ESB1을 MB2에 연결하지 않으려면 (MB1을 사용할 수없는 경우) 간단히 ESB1의 "jndi.properties"파일에있는 브로커 목록에서 MB2의 연결 URL을 제거하십시오. 또한 MB1을 다시 사용할 수있을 때까지 다시 시도하려면 MB1 중개자 URL의 "주기 수", "다시 시도", "연결 지연"을 달라야합니다. 따라서 "라운드 로빈 (round-robin)"전략을 통해이 유스 케이스를 쉽게 구현할 수 있습니다.

+0

예, 우리는 장애 조치 인터페이스의 소스 코드를 분석하고 귀하가 언급 한대로 작동합니다. 지금은 MB1이 다시 살아날 때 잠시 후 장애 조치 스위치가 작동합니까? 즉, 각 트랜잭션 후에 연결이 재설정되고 브로커 목록이 다시 검사됩니까? 내 예제에서는 MB1이 다운되었으므로 라운드 로빈 방식이 MB2로 전환되고 MB1이 다시 올라온 후에 ESB1이 다시 작동해야합니다. –