как правильно протестировать публикацию темы ActiveMQ - PullRequest
0 голосов
/ 19 декабря 2018

Я пытаюсь проверить, правильно ли мой код публикует сообщения по теме.Я знаю, что мог бы JMeter или что-то еще;но я хочу иметь тесты в кодовой базе, работающие против встроенного брокера.Изначально это было решение на основе Spring, однако, чтобы упростить все это, я предоставил минимальное воспроизводимое решение здесь

Суть кода:

    @Test
public void testPublisherService() {
    final String payload = "test-dummy-message";
    JmsTemplate destinationTemplate = buildJmsTemplate();
    JmsTemplate sourceTemplate = buildJmsTemplate();
    sourceTemplate.setReceiveTimeout(10000);
    JmsPublisherService service = new JmsPublisherService(destinationTemplate);

    log.info("Going to publish message");
    service.send(TOPIC_NAME, payload);
    log.info("Message is published");

    log.info("Going to retrieve message");
    Object retrieved = sourceTemplate.receiveAndConvert(new ActiveMQTopic(TOPIC_NAME));
    log.info("Message is retrieved");

    Assert.assertNotNull(retrieved);
}

и это не удалось!т.е. ноль всегда получен из темы!Я добавил журналирование DEBUG для ActiveMQ, и это также не очень помогло:

2018-12-19 10:17:37.393  INFO   --- [main] ru.mkv.jms.JmsPublisherIntTest           : Message is published
2018-12-19 10:17:37.393  INFO   --- [main] ru.mkv.jms.JmsPublisherIntTest           : Going to retrieve message
2018-12-19 10:17:37.393 DEBUG   --- [ActiveMQ VMTransport: vm://test_broker#1-1] o.a.a.broker.jmx.ManagementContext       : Unregistering MBean org.apache.activemq:type=Broker,brokerName=test_broker,destinationType=Topic,destinationName=test_topic,endpoint=Producer,clientId=clientId4.74703049017198,producerId=ID_EEW00163-52272-1545207456632-4_1_1_1
2018-12-19 10:17:37.393 DEBUG   --- [ActiveMQ VMTransport: vm://test_broker#1-1] o.a.activemq.broker.TransportConnector   : Publishing: vm://test_broker for broker transport URI: vm://test_broker
2018-12-19 10:17:37.393 DEBUG   --- [ActiveMQ VMTransport: vm://test_broker#1-1] o.a.activemq.broker.TransportConnector   : Publishing: vm://test_broker for broker transport URI: vm://test_broker
2018-12-19 10:17:37.399 DEBUG   --- [ActiveMQ VMTransport: vm://test_broker#1-2] o.a.a.broker.region.AbstractRegion       : test_broker adding consumer: ID:EEW00163-52272-1545207456632-4:1:2:1 for destination: topic://test_topic
2018-12-19 10:17:37.400 DEBUG   --- [ActiveMQ VMTransport: vm://test_broker#1-2] o.a.activemq.broker.TransportConnector   : Publishing: vm://test_broker for broker transport URI: vm://test_broker
2018-12-19 10:17:37.400 DEBUG   --- [ActiveMQ VMTransport: vm://test_broker#1-2] o.a.activemq.broker.TransportConnector   : Publishing: vm://test_broker for broker transport URI: vm://test_broker
2018-12-19 10:17:37.400 DEBUG   --- [ActiveMQ VMTransport: vm://test_broker#1-2] o.a.a.broker.region.AbstractRegion       : test_broker adding destination: topic://ActiveMQ.Advisory.Consumer.Topic.test_topic
2018-12-19 10:17:37.402 DEBUG   --- [main] o.a.activemq.thread.TaskRunnerFactory    : Initialized TaskRunnerFactory[ActiveMQ Session Task] using ExecutorService: java.util.concurrent.ThreadPoolExecutor@3e27ba32[Running, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0]

2018-12-19 10:17:47.405 DEBUG   --- [main] o.a.activemq.ActiveMQMessageConsumer     : remove: ID:EEW00163-52272-1545207456632-4:1:2:1, lastDeliveredSequenceId: -1
2018-12-19 10:17:47.406 DEBUG   --- [ActiveMQ VMTransport: vm://test_broker#1-2] o.a.a.broker.jmx.ManagementContext       : Unregistering MBean org.apache.activemq:type=Broker,brokerName=test_broker,destinationType=Topic,destinationName=test_topic,endpoint=Consumer,clientId=clientId4.74703049017198,consumerId=ID_EEW00163-52272-1545207456632-4_1_2_1
2018-12-19 10:17:47.407 DEBUG   --- [ActiveMQ VMTransport: vm://test_broker#1-2] o.a.a.broker.region.AbstractRegion       : test_broker removing consumer: ID:EEW00163-52272-1545207456632-4:1:2:1 for destination: topic://test_topic
2018-12-19 10:17:47.407  INFO   --- [main] ru.mkv.jms.JmsPublisherIntTest           : Message is retrieved
2018-12-19 10:17:47.408  INFO   --- [main] o.apache.activemq.broker.BrokerService   : Apache ActiveMQ 5.15.3 (test_broker, ID:EEW00163-52272-1545207456632-0:1) is shutting down

Я подозреваю, что это связано с жизненным циклом соединения / брокера, о котором я не очень осведомлен ... или может бытьпоисковый подход.Кстати, документы ActiveMQ, похоже, очень ограничены по объему, и я не смог найти какой-либо подробной документации о том, как это на самом деле работает.

1 Ответ

0 голосов
/ 19 декабря 2018

Это ожидаемое поведение.Вы отправляете сообщение в тему до того, как какая-либо подписка существует.Сообщение, отправленное в тему без подписки, просто отбрасывается.Так работают темы.Вам необходимо создать подписку, отправить сообщение, а затем извлечь сообщение из подписки.Помимо этого вы можете переключиться на использование очереди вместо темы.Если бы вы сделали это, я бы ожидал, что ваш тест будет работать нормально.

Кроме того, вы можете рассмотреть возможность использования JMS API, а не Spring поверх JMS API, поскольку это может быть проще.

...