2013-02-20 4 views
2

현재 WebLogic 및 분산 대기열을 사용합니다. 그리고 문서에서 분산 대기열을 사용하면 전역 JNDI 이름을 사용하여 클러스터의 모든 대기열에 대한 연결을 검색 할 수 있습니다. Distributed Queue는 여러 관리 서버에서로드 균형 조정 연결을 제공하는 기능 중 하나입니다. 그래서 우리는 4 개의 Managed Server를 가지고 있습니다. (각 물리적으로 2 개, 멀티 캐스트를 통해 통신합니다), 각 Managed Server에는 자체 JMS 서버가 있습니다.모든 JMS 클러스터에서 분산 대기열의 메시지

나는 이것에 대한 답을 이미 알고 있지만, Queue에서 메시지를 소비하고 Queue가 클러스터의 각 Mgd 서버에 존재한다면 기술적으로는 불가능하다는 것을 알 수있다. 메시지를 임의의 대기열에서 끌어냅니다 (연결된 대기열에서 메시지를 끌어낼 수 있음). 따라서 Mgd 서버 4에 대한 메시지가 있고 Mgd 서버 1에 연결하면 Mgd 서버 4의 큐에있는 메시지가 표시되지 않습니다.

Java EE 또는 WLS에서 소비하는 방법이 있습니까? 큐의 모든 노드 (클러스터에서)의 메시지. 각 Mgd 서버의 큐의 모든 인스턴스에 대한보기를 좋아합니까? 너무 나타나지 않고 문서는 이것이 가능뿐만 아니라,이 비디오 (분 5 정도)없는 것처럼 보일 수 있습니다 :

http://www.youtube.com/watch?v=HAKixK_wp0Q

답변

2

아니요 클라이언트가 동일한 클러스터의 다른 관리 서버에 연결된 경우 하나의 관리 대상 서버로 전달되는 메시지를 사용자가 컨 수 없습니다.

다음은 작동 방식입니다. UDT를 사용하는 경우 wls는 각 관리 대상 서버에 대해 4 개의 고유 JNDI 이름으로 내부적으로 확인되는 JNDI 이름을 제공하며 각 관리 대상 서버의 JMS 서버는 고유합니다. 메시지를 게시 할 때 UDQ JNDI 이름을 사용할 때 선택한 알고리즘과 연결 팩토리에서 수행 된 다른 구성을 사용하여 4 개의 관리 서버 중 하나에 도달합니다.

메시지 소비자가 UDQ를 수신하면 관리 대상 서버 중 하나의 JMS 서버에 고정됩니다. 다른 서버의 메시지에 대한 가시성이 없습니다.

일반적으로 UDQ는 둘 이상의 관리 대상 서버에서 동시에 메시지를 사용하려는 경우에 사용됩니다. 일반적으로 MDB를 클러스터에 배포합니다. 즉, MDB가 각 관리 대상 서버에 배포되고 각 서버가 로컬 JMS ​​서버에서 메시지를 사용할 수 있습니다.

0

메시지 저장소가 config'd 경우 나는 당신이 할 수있는 생각 데이터베이스를 사용합니다. 그렇다면 큐에서 항목을 제거하면 공유 db 테이블에서 해당 항목이 제거됩니다. 나는. 모든 JMS 서버가 동일한 db 인스턴스와 테이블을 가리키고 있습니다. 테스트하기도 쉽습니다.