2012-01-03 4 views
1

우리는 WAS 클러스터에 배치 될 애플리케이션을 개발 중입니다. 이 응용 프로그램은 여러 JMS (Websphere MQ) 대기열에서 메시지를 소비하고 결과를 단일 데이터베이스에 씁니다.Websphere Application Server 클러스터 및 JMS 메시지 사용량

그러나 앱 내에서 특정 ID에 대한 모든 메시지가 한 번에 하나씩 처리되어야한다는 요구가 있습니다. 현재 동기화 된 컬렉션을 사용하여이를 적용하지만 클러스터에서는 작동하지 않습니다.

이렇게하려면 응용 프로그램/클러스터/활성화 사양을 구성하는 방법이 있습니까?

답변

0

먼저 알아야 할 점은 응용 프로그램이 수평 적으로 확장하기 위해 메시지 친 화성을 제거하도록 설계되어야한다는 것입니다. 메시징 전송이 응용 프로그램의 설계 제한 사항을 극복하기 위해 수행 할 수있는 예상치에는 한계가 있습니다. 메시지 페이로드 콘텐츠를 기반으로 메시지 전달 경로, 시퀀스 또는 대상을 변경하는 처리는 전송이 아닌 ESB의 작업입니다. 최적의 솔루션은 수평 확장에 적합한 아키텍처로 응용 프로그램을 재 설계하는 것입니다.

즉, 이렇게하는 한 가지 방법은 메시지 그룹을 사용하는 것입니다. 새 그룹을 찾는 응용 프로그램 인스턴스는 JMSXGroupID1이 아닌 메시지를 무시해야합니다. 메시지를 보내는 응용 프로그램은 그에 따라 그룹 ID와 일련 번호를 설정해야합니다.

이 작업을 수행하는 또 다른 방법은 가로 채기 및 발송입니다. 프로그램은 주 큐를 읽고 ID의 새로운 인스턴스를 찾습니다. 새 ID를 볼 때 해당 ID가 하나의 메시지를 별도의 디스패치 큐로 이동시킵니다. 소비하는 응용 프로그램 인스턴스는 모두 작업을 찾고있는 디스패치 대기열을 읽습니다. 이 큐의 ID는 고유하기 때문에 각 ID는 특정 응용 프로그램 인스턴스에 할당됩니다. 그런 다음 처리 할 ID에 대한 선택기를 사용하여 기본 대기열을 엽니 다. 생산자 응용 프로그램은 선택을 가능하게하기 위해 ID를 메시지 등록 정보 또는 상관 ID 필드로 설정해야하지만 그룹을 관리 할 필요가 없습니다.

0

나는 우리가 우리가에 하나 개의 요청을 처리하려는 MDB가 ... 당신과 이전의 응답자 모두가 나보다 이것에 대해 더 많이 알고 있지만, 단지의 경우이 도움이

을 알 수 있습니다 전체 클러스터에 걸리는 시간이므로 활성화 사양의 "최대 동시 종점"을 1로 설정합니다.

이렇게 특정 ID에 대해 다른 대상을 사용하거나 초기 대상의 논리에서 ID를 다시 큐에 대기시킬 수 있습니다 이 두 번째 목적지까지?

관련 문제