Я пытаюсь проверить, правильно ли мой код публикует сообщения по теме.Я знаю, что мог бы 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, похоже, очень ограничены по объему, и я не смог найти какой-либо подробной документации о том, как это на самом деле работает.