Тест Spring Boot Camel

Я пишу тест для Camel, используя Spring boot. Ниже представлена ​​конфигурация тестового класса.

@RunWith(CamelSpringBootRunner.class)
@SpringBootApplication
@ComponentScan(basePackages = ["example.test"])
@UseAdviceWith
@BootstrapWith(SpringBootTestContextBootstrapper)
@DirtiesContext
class RouteTest {

  private static final Logger LOGGER = LoggerFactory.getLogger(RouteTest.class)

  @Autowired ModelCamelContext camelContext

  @Test
  void "flow"() {
     camelContext.getRouteDefinition(route.routeId).adviceWith(camelContext, new AdviceWithRouteBuilder() {
        @Override
        void configure() throws Exception {
        }
     }
     LOGGER.info("IN TEST: ******* Camel Status: "+camelContext.getStatus())
  }

Я полагаю, что верблюда не стоит заводить. Но когда я запускаю тест, он уже запущен.

Я заметил, что CamelSpringBootRunner действительно запускает контекст верблюда в CamelSpringBootExecutionListener.

Как заставить не запускать контекст верблюда.


person AMK    schedule 09.11.2017    source источник
comment
Какую версию Camel вы используете?   -  person Claus Ibsen    schedule 10.11.2017
comment
Я использую последнюю версию Camel 2.20.0. Но для этого уже сообщается об ошибке. CAMEL-11955   -  person AMK    schedule 10.11.2017
comment
Использование Camel 2.20.1 решило проблему   -  person AMK    schedule 19.11.2017


Ответы (3)


В последней версии camel есть опция автозапуска camel. Вы можете добиться того, чего хотите, добавив опцию autoStartup. Например, указанный ниже маршрут настроен autoStartup = false, чтобы предотвратить запуск Camel при запуске Spring.

<camelContext id="myCamel" xmlns="http://camel.apache.org/schema/spring" autoStartup="false">
    <route>
        <from uri="direct:start"/>
        <to uri="mock:result"/>
    </route>
</camelContext>

Вы можете вручную запустить Camel позже, вызвав его метод запуска, как показано ниже:

ApplicationContext ac = ...
SpringCamelContext camel = (SpringCamelContext) ac.getBean("myCamel");

// now start Camel manually
camel.start();
person NitKrish    schedule 09.11.2017
comment
У меня для autoStartup установлено значение false, но CamelSpringBootExecutionListener не принимает во внимание этот флаг автозапуска. и запускает контекст. - person AMK; 09.11.2017
comment
Ошибка CAMEL-11955, возникшая в Camel-2.20.0. - person AMK; 10.11.2017

Если вы используете старую версию camel, тогда опция autoStartup не будет работать, попробуйте вместо нее использовать shouldStartContext. Иногда запуск верблюда после установки shouldStartContext не работает, поэтому я применил работу в приведенном ниже примере. Попробуй это :

установка shouldStartContext вручную перед запуском контекста из кода:

((SpringCamelContext)camelContext).setShouldStartContext(true);
camelContext.start();

Пример контекста:

<camel:camelContext id="ids.camel.context" shouldStartContext="false"> 

        <!-- Queue endpoints. -->
        <camel:endpoint id="defaultInQueue" uri="jms:queue:${default.in.queue.name}"/>  
        <camel:endpoint id="defaultOutQueue" uri="jms:queue:${default.out.queue.name}"/>                

        <!-- Route to send messages to IDS  -->
        <camel:route id="out" trace="true">
            <camel:from uri="direct:sender"/>
            <!-- Do not expect answer (fire and forget) -->
            <camel:setExchangePattern pattern="InOnly"/>
            <camel:to ref="defaultOutQueue"/>
        </camel:route>

        <!-- Route to receive -->   
        <camel:route id ="in" trace="true">
            <camel:from ref="defaultInQueue"/>
            <camel:to uri="bean:defaultTextAdapter?method=onMessage"/>
        </camel:route>

    </camel:camelContext>   
person NitKrish    schedule 10.11.2017

Использование Camel 2.20.1 решило проблему

person AMK    schedule 19.11.2017