Проблема с закрытием CamelContext в тесте на огурец - PullRequest
1 голос
/ 22 января 2020

Проблема

Проблема несколько мала, но выглядит следующим образом: При наличии нескольких сценариев в тесте на огурец журнал загрязняется следующим сообщением:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...