2017-10-20 8 views
0

ActiveMq 내장 브로커를 사용하고 있습니다. 나는 술집/하위 모델을 사용하고 있습니다. 주제에 구독하는 여러 명의 청취자가 있습니다. 기본 메시지 수신기 컨테이너를 사용하고 있습니다.Activemq에서 주제가 작동하는 여러 수신기는 어떻게 작동합니까?

그래서 주제와 구독자 통계를 얻기 시작했습니다.

주제의 메시지 수에 대한 통계는 항상 0입니다.입니다.

DestinationStatistics statistics = destination 
         .getDestinationStatistics(); 
    LOG.info("The message count in topic is" + destination.getMessages().count()) 

주제의 메시지 개수는 '내가 본 것까지 항상 0'입니다. 이제 대상에 대한 통계를 얻었습니다. 대상은 내가 사용중인 주제입니다.

Iterator<Subscription> it = destination.getConsumers().iterator(); 
    while(it.hasNext()){ 
    Subscription s= it.next(); 
    LOG.info(s.getPendingQueueSize()+ ""+ s.getEnqueueCounter()+""+s.getDequeueCounter()) 
    } 

각 소비자의 통계에는 내가 펍/서브의 일부로 보낸 메시지가 반영된 것으로 나타났습니다.

이 전체 프로세스는 어떻게 작동합니까?

메시지를 게시하면 브로커가 즉시 구독자에게 메시지를 보내고 구독자는 해당 소비자의 메시지를 유지 관리합니다. 따라서 topic의 메시지 수는 항상 0이며 각 소비자의 통계는 브로커가받은 메시지에 대한 아이디어를 제공합니다.

누군가 프로세스를 설명하고 통계가 어떻게 작동해야합니까?

+0

당신은 auto-ack입니까? 그렇다면 즉시 모든 메시지를 소비자에게 보냅니다. 주제가 오래 지속되고 소비자가 실행되고 있지 않다면 주제에 대한 메시지가 표시되어야합니다. – dmossakowski

답변

0

주제는 단지 주소 일뿐입니다. 메시지를 보관할 수 없으며 메시지를 구독자에게 발송합니다. 따라서 메시지 수는 없습니다.

가입자는 소비자가 소비 할 때까지 얼마 동안 메시지를 보관할 수 있습니다.

ActiveMQ 웹 콘솔 또는 JMX/Jolokia API를 사용하여 전달 대기중인 메시지 수와 항목 대기열에 포함 된 메시지 수에 대한 통계를 볼 수 있습니다.