2016-04-11 4 views
1

Я пытаюсь получить статистику подписки для своей темы из встроенного ActiveMQ с помощью теста JUnit. Я могу подписаться на эту тему, отправить сообщение на эту тему и получить это сообщение в своем слушателе/​​подписчике.Не удается получить встроенное статистическое сообщение ActiveMQ

Однако, когда я пытаюсь получить статистику из этого ActiveMQ, потребитель получает время. И если я не добавлю «receiveTimeout», чем потребитель ждет неопределенно долго для сообщения. Вот мой код для статистики:

ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("vm://localhost?broker.persistent=false"); 
    connectionFactory.setStatsEnabled(true); 

    Connection connection = connectionFactory.createConnection(); 
    connection.setClientID(format("ActiveMqStatistics-%s", System.nanoTime())); 
    connection.start(); 

    Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 
    Queue replyTo = session.createTemporaryQueue(); 
    MessageConsumer consumer = session.createConsumer(replyTo); 

    String queueName = "ActiveMQ.Statistics.Subscription"; 
    Queue testQueue = session.createQueue(queueName); 
    MessageProducer producer = session.createProducer(testQueue); 
    Message msg = session.createMessage(); 
    msg.setJMSReplyTo(replyTo); 
    producer.send(msg); 

    System.out.println("Statistics request sent. Waiting to receive reply..."); 

    long receiveTimeout = 5000L; 
    MapMessage reply = (MapMessage) consumer.receive(receiveTimeout); 
    assertNotNull(reply); 

    for (Enumeration e = reply.getMapNames();e.hasMoreElements();) { 
     String name = e.nextElement().toString(); 
     System.out.println(name + "=" + reply.getObject(name)); 
    } 

    connection.close(); 

Я получаю отказ утверждения, потому что «ответ» равен нулю.

Любые идеи?

+0

У вас есть StatisticBrokerPlugin, установленный в вашем брокере? –

+0

Tim: Нет, я использую виртуальный встроенный activemq, т. Е. URL-адрес брокера: «vm: // localhost? Broker.persistent = false». На основе документации (http://activemq.apache.org/statisticsplugin.html) это должно поддерживаться. – Gul

ответ

1

Для этого вам необходимо создать экземпляр брокера, в котором установлен плагин Statistics Broker, он не из коробки.

В конфигурации XML можно включить следующим образом:

<broker ...> 
    <plugins> 
    <statisticsBrokerPlugin/> 
    </plugins> 
</broker> 

Или в модульном тесте вы можете создать в VM брокера используя что-то подобное следующему коду.

protected BrokerService createBroker() throws Exception { 
    BrokerService answer = new BrokerService(); 
    BrokerPlugin[] plugins = new BrokerPlugin[1]; 
    plugins[0] = new StatisticsBrokerPlugin(); 
    answer.setPlugins(plugins); 
    answer.setDeleteAllMessagesOnStartup(true); 
    answer.addConnector("tcp://localhost:0"); 
    answer.start(); 
    return answer; 
} 
0

У меня была такая же проблема, и я нашел решение. Я настраиваю activeMQ встроенный брокер, используя XML, и я могу добавить статистикуBrokerPlugin следующим образом.

<!-- lets create an embedded ActiveMQ Broker --> 
    <amq:broker useJmx="false" persistent="false" enableStatistics="true" brokerName="xxx-test-broker" brokerId="xxx-test"> 
     <amq:transportConnectors> 
      <amq:transportConnector uri="tcp://localhost:0" /> 
     </amq:transportConnectors> 
     **<amq:plugins> 
      <amq:statisticsBrokerPlugin/> 
     </amq:plugins>** 
    </amq:broker> 

Так что мой ActiveMQ соединение URL будет VM: // локальный.

Я думаю, что это будет полезно для кого-то.

Смежные вопросы