2012-11-07 6 views
2

여러 생성자로부터 메시지를 수신하는 단일 '지점 간'IBM MQ 대기열이 있습니다. 내 응용 프로그램은 대기열에서 메시지를 사용합니다. 나는 비동기 적으로 메시지를 소비하는 봄 '이 JmsTemplate "와"DefaultMessageListenerContainer "를 사용하고 있습니다.단일 지점 간 대기열과 여러 청취자

내 응용 프로그램이 같은 큐를 듣고 각 JVM에서 활성이 리스너가 의미 2 개의 JVM에서 실행되고 있습니다.

오는 내 질문에, 메시지가 도착하면 ...

1

)는 청취자가 메시지 큐에 도착한 것을 알고? 않습니다 어떻게 메시지를 수신 할 두 개의 리스너의 아웃

2)? 무엇 인 청취자에게 메시지를 배포하는 방법은 무엇입니까?

3) 단일 큐에 대해 리스너의 'N'카운트로 스케일 할 수 있습니까? 10 명의 청취자로 성장하면 스케일링은 어떻게 작동합니까? 메시지가 청취자에게 어떻게 분배됩니까?

4) MQ 서버는 동일한 메시지가 여러 수신기에 전송되지 않도록 어떻게 확인합니까?

간단한 질문 일 수는 있지만 위의 시나리오가 어떻게 작동하는지 드릴 다운 할 수는 없습니다. 생각을 공유하십시오.

답변

5
  1. 이는 IBM 클라이언트 라이브러리의 기능입니다. 리스너 컨테이너는 단순히 메시지를 기다리는 JMS API를 폴링합니다. 기본적으로 1 초의 수신 타임 아웃을 사용합니다. TRACE 레벨 로깅을 사용하면이 활동을 보여주는 로그 메시지가 표시됩니다. 제한 시간은 컨테이너에서 receiveTimeout을 설정하여 수정할 수 있습니다.
  2. 이는 클라이언트의 관점에서 볼 때 불확실합니다. IBM 브로커는 얼마나 많은 소비자가 등록되어 있는지 알고 있습니다. 일부 브로커는 프리 페치를 구성 할 수 있습니다. 이는 대용량에서는 성능을 높일 수 있지만 저용량에서는 성능을 해칠 수 있습니다.
  3. 예; Spring Listener Container는로드에 기반하여 리스너를 동적으로 확장 할 수 있습니다. 최소/최대 소비자를 구성 할 수 있으며 Spring은 필요에 따라 해당 범위 내에서 조정합니다. 중개인의 알고리즘에 따라 업무가 분산되도록 각 청취자는 별도의 소비자입니다.
  4. 이는 IBM 브로커 (및 JMS 계약의 일부)의 기능입니다.

트랜잭션을 사용하는 경우 메시지가 대기열로 롤백됩니다. 동일한 리스너가 재전송 된 메시지를 수신 할 것이라는 보장은 없습니다.

+0

감사합니다. 따라서 청취자에게 메시지를 배포하는 인텔리전스는 청취자가 아닌 브로커에 있습니다. – Karthik