2016-07-06 4 views
0

우선 시나리오를 설명하겠습니다.
WSO2 ESB (4.9.0)의 두 노드와 Apache ActiveMQ의 두 노드가 네 가지 시스템에서 실행됩니다. 현재, ActiveMQ를 각각 ESB 노드 점에 하나 개의 노드 하나 개 AMQ 노드가 다운되면이 경우WSO2 ESB ActiveMQ를 통한 JMS 균형 조정 및 페일 오버

ESB1 -> AMQ1 
ESB2 -> AMQ2 

는 ESB의 한 노드 만 생산하고 메시지를 소비 할 수있을 것입니다.

이 문제를 해결하고 고 가용성을 구현하는 방법에 대해 생각해 보면 ActiveMQ 설명서에서 장애 조치를 구성하기위한 url 구문을 설명하는 a section을 발견했습니다.
그래서, 각 ESB에, 나는 문서로 구성 공급자 URL과 메시지 저장소에 부착 된 메시지 프로세서를 구성한 말한다 :

failover:(tcp://soamsg01:61616,tcp://soamsg02:61616) 

지금 메시지를 저장하는 과정이 "부분적으로"해결되었다. 메시지 삽입은 항상 각 ESB의 동일한 AMQ 노드에서 발생하지만 노드가 다운되면 삽입이 다른 ESB로 이동합니다.

주요 문제는 소비에 있습니다. 메시지 프로세서는 시작할 때 연결할 AMQ 노드 중 하나를 무작위로 선택합니다. 따라서 두 ESB 노드가 AMQ의 동일한 노드에 연결되어 대기열 중 하나가 읽히지 않을 수 있습니다.

해결 방법이 있습니까?

답변

1

해결책은 마스터/슬레이브에서 ActiveMQ를 구성하는 것입니다. 목표는 동일한 데이터베이스를 사용하여 다른 ActiveMQ 노드를 갖는 것입니다. 공유 파일 시스템에서 kahadb를 공유하거나 공유 데이터베이스를 사용할 수 있습니다. http://activemq.apache.org/masterslave.html

모든 ESB 노드는 동일한 ActiveMQ 인스턴스에 연결됩니다. 실패하면 수동 노드가 활성화되고 모든 ESB 노드가 수동 노드에 연결됩니다. 이 새로운 ActiveMQ 노드는 일정한 데이터가 고유 한 데이터베이스에 저장되기 때문에 같은 내용으로 sames 큐와 주제를 계속 제공합니다.

+0

답변 해 주셔서 감사합니다. 이 경우 데이터베이스를 호스팅하는 실제 머신이 다운되면 모든 AMQ 노드가 실패하거나 데이터베이스가 모든 노드에 복제됩니까? – elias

+0

SAN상의 호스트 kahadb 데이터 파일, Oracle RAC와 같은 활성/수동 또는 클러스터 데이터베이스 사용 ... –