누군가가 Network of Brokers의 컨텍스트에서 activemq 가상 주제의 동작을 명확히 할 수 있습니까? 가입 전파에 혼란이 있습니다.브로커의 네트워크에서 Activemq 가상 주제 구독 전파가 어떻게 작동합니까?
예를 들어 다른 브로커와 네트워크 커넥터가있는 브로커가 있습니다. 그런 다음
<networkConnectors>
<networkConnector name="connectorToRemoteBroker" uri="static:(tcp://mq002:61616)?maxReconnectAttempts=0" duplex="false" networkTTL="3" decreaseNetworkConsumerPriority="true">
</networkConnectors>
내가 실행 소비자 (A) 브로커 mq001에 가상 주제 : endpointURI : activemq:Consumer.A.VirtualTopic.tempTopic
내가 몇 가지 흥미로운를 알 수 있습니다 브로커 mq001은 브로커 mq002에 개방형 네트워크 커넥터를 다음했다 말할 수 있습니다 동작을 확인하십시오. 우선, 주제가 없습니다 "VirtualTopic.tempTopic"
가 생성되었습니다. 그러나 대기열 (가상 주제의 기본 물리적 대기열)이 있습니다. Consumer.A.VirtualTopic.tempTopic
그리고이 대기열에는 활성 로컬 소비자가 하나 있습니다.
그런 다음 다른 소비자 (B)를 동일한 가상 주제로 시작하지만 이미 브로커 2 (mq002)에 있습니다.
endpointURI - ActiveMQ를 : Consumer.B.VirtualTopic.tempTopic
지금은 브로커 2 ActiveMQ를 콘솔을 살펴합니다. 아직 사용 가능한 가상 주제가 표시되지 않습니다. Consumer.B.VirtualTopic.tempTopic에는 활성 소비자 (mq002의 경우 로컬)가 하나씩있는 다른 물리적 대기열이 있습니다.
나는 브로커 콘솔을 살펴 때 하나 지금은 두 개의 큐를 참조하십시오
Consumer.A.VirtualTopic.tempTopic - 활성와 - 활성 지역 소비자 Consumer.B.VirtualTopic.tempTopic과를 원격 소비자.
따라서 구독 전파는 최소한 물리적 대기열 수준에서 작동합니다. 듀플렉스가 아니기 때문에 mq002에서 mq001까지만 작동합니다.
는 그럼 난 주제에 메시지를 게시 :
activemq:topic:VirtualTopic.tempTopic
그것은 mq001 및 mq002 모두에서 소비자에 의해 소비되고있다. 또한 마침내 activemq 콘솔 (VirtualTopic.tempTopic)에서 사용할 수있는 주제가 있습니다.
그래서 각 소비자는 정확히 하나의 메시지를 소비했습니다. 더 많은 수의 메시지로 반복하면 여전히 동일하게 작동합니다. 중복 된 메시지가 없으며 손실 된 메시지도 없습니다. 각 물리적 큐의 대기열에 포함 된 메시지 수는 가상 주제의 수와 일치합니다.
이것은 정확히 브로커 네트워크의 경우 가상 주제에서 기대하는 동작입니다.
하지만 지금 내 혼란의 원인 :
는 기본 네트워크 구성을 사용하는 경우 중복 메시지를 얻을 가능성이 높습니다. 이는 네트워크 노드가 가상 토픽으로 전송 된 메시지 전달뿐만 아니라 연관된 물리적 큐이기도하기 때문입니다.
우선 무엇이든 중복 된 것을 보지 못했지만 잘 작동했습니다. 그러나 조언을 따르고 실제 대기열 대상을 비활성화하면 어떻게됩니까? 나는 소비자를 시작 할 때
<networkConnectors>
<networkConnector name="connectorToRemoteBroker" uri="static:(tcp://mq002:61616)?maxReconnectAttempts=0" duplex="false" networkTTL="3" decreaseNetworkConsumerPriority="true">
<excludedDestinations>
<queue physicalName="Consumer.*.VirtualTopic.>"/>
</excludedDestinations>
</networkConnector>
</networkConnectors>
그런 다음 나는 원격 소비자가 더 이상 브로커 mq001의 물리적 큐 Consumer.B을 듣고 볼 수 없습니다. 가상 토픽에 메시지를 게시하면 Consumer.A (로컬)에서만 소비됩니다. 따라서 구독 전달은 가상 주제에 대해서는 무시되고 실제 대기열에서만 작동합니다.
나는 activemq 문서가 조금 오래되었다고 생각합니다. 아무도 그것을 확인하거나 반박 할 수 있습니까?
미리 감사드립니다.
덕분에 많이, 지금은 나에게 완전히 분명하다. 단위 테스트는 좋아 보이며 도움이됩니다. –
@ceposta - 네트워크 브로커 설정으로 현재 공유 스토리지 마스터 - 슬레이브 설정을 전환하고 있습니다. 우리는 가상 토픽을 많이 사용합니다 - 위의 대답은 가상 토픽을 네트워크로 연결된 브로커간에 의도 한대로 작동시킬 수있는 방법이 없다는 것을 의미합니까? 중개인 중 하나에서 주제 소비자 및/또는 가상 주제 대기열 소비자를 허용합니까? 그것은 내가 선택한 설정 (주제를 제외하거나 v.queues 제외)처럼 보이지만, 나는 바람직하지 않은 행동을합니다. – jamespconnor