Проблема
Проблема несколько мала, но выглядит следующим образом: При наличии нескольких сценариев в тесте на огурец журнал загрязняется следующим сообщением:
14:54:54.021 [Camel (camel-1) thread #7 - TemporaryQueueReplyManager[queueName]] ERROR o.a.c.c.j.DefaultJmsMessageListenerContainer - Could not refresh JMS Connection for destination 'temporary' - retrying using FixedBackOff{interval=5000, currentAttempts=26, maxAttempts=unlimited}. Cause: null
Что я делаю
Итак, у меня есть приложение, которое производит толстую банку. В моем тесте Cucumber я запускаю этот jar для каждого сценария из своего рабочего каталога. В банке используется JMS, поэтому я создаю посредника ActiveMQ в тесте для связи. Хотя в банке не используется Apache -Camel, в тестах на огурец используется Camel.
В начале каждого сценария устанавливается jar, создается контекст Camel, запускается брокер AMQ и, наконец, запускается jar.
Затем выполняются этапы тестирования, оба из которых используют Routes in если баночка имеет инициативу и использует продюсера, если инициатива, о которой я пишу, имеет инициативу.
В конце теста я сначала останавливаю приложение, вызываю stop в CamelContext и останавливаю брокера.
Кажется, что шаблон для каждого сценария в одном и том же файле объектов, который находится под одним и тем же определением прогона JUnit, число появлений вышеуказанной ошибки, по-видимому, увеличивается.
My Гипотеза заключается в том, что что-то в CamelContext задерживается, что вызывает сообщение.
То, что я пробовал
В начале проекта верблюд версии 2.19.5 был выбран. Я попытался запустить его с версией 2.24.3, которая ничего не изменила.
Остальные мои попытки находятся в этом блоке, где я останавливаю CamelContext и брокера:
camelContext.getShutdownStrategy().setSuppressLoggingOnTimeout(true);
camelContext.getShutdownStrategy().setLogInflightExchangesOnTimeout(false);
camelContext.getShutdownStrategy().setTimeout(TimeUnit.SECONDS.toMillis(5));
camelContext.stop();
long startTime = System.currentTimeMillis();
try {
Awaitility.await().atMost(1, TimeUnit.MINUTES).until(() -> camelContext.getRoutes().isEmpty());
} finally {
LOG.info("Waited time for Camel was {}", System.currentTimeMillis() - startTime);
startTime = System.currentTimeMillis();
if (broker != null) {
broker.getBrokerService().stop();
broker.getBrokerService().waitUntilStopped();
LOG.info("Waited time for ActiveMQ was {}", System.currentTimeMillis() - startTime);
}
}
В результате регистрация составила около 100 мс для Camel и менее 10 мс для ActiveMQ.