Есть ли в Camel какой-либо компонент для запуска автономного маршрута? - PullRequest
0 голосов
/ 05 марта 2020

Я хочу, чтобы дочерний маршрут выполнялся из маршрута Timer, но следующий код не работает должным образом:

Дочерний маршрут:

from("direct:processOrder").id("dd")
//  .setBody(constant("select * from customer"))
//  .to("jdbc:testdb")
    .to("sql:select * from EMPLOYEE?dataSource=masterdata")
    .log(LoggingLevel.INFO, "DB")
    .to("log:?level=INFO&showBody=true").end();

Основной маршрут:

from("timer://foo?period=30000")
    .log(LoggingLevel.INFO, "Triggered Company")
    .process(new Processor() {
      public void process(Exchange exchange) throws Exception {
        exchange.getContext().startRoute("dd");
      }
    })
    .end();

Вывод:

20/03/05 13:28:07 INFO impl.DefaultCamelContext: StreamCaching is not in use. If using streams then its recommended to enable stream caching. See more details at http://camel.apache.org/stream-caching.html
20/03/05 13:28:08 INFO impl.DefaultCamelContext: Route: dd started and consuming from: Endpoint[direct://processOrder]
20/03/05 13:28:08 INFO impl.DefaultCamelContext: Route: route1 started and consuming from: Endpoint[timer://foo?period=30000]
20/03/05 13:28:08 INFO impl.DefaultCamelContext: Total 2 routes, of which 2 is started.
20/03/05 13:28:08 INFO impl.DefaultCamelContext: Apache Camel 2.15.1 (CamelContext: camel-1) started in 0.400 seconds
20/03/05 13:28:09 INFO route1: Triggered Company
20/03/05 13:28:09 INFO impl.DefaultCamelContext: Route: dd started and consuming from: Endpoint[direct://processOrder]

Какой компонент будет использоваться в from дочернего маршрута, чтобы он просто работал, когда мы .startRoute из основной программы маршрута?

Ответы [ 2 ]

1 голос
/ 05 марта 2020

Согласно вашему журналу, оба маршрута запущены правильно, поэтому вам не нужно явно выполнять .startRoute.

Чтобы передать сигнал на другой маршрут, наберите .to("direct:processOrder") в родительском маршруте вместо работает процессор у вас сейчас:

from("timer://foo?period=30000")
  .log(LoggingLevel.INFO, "Triggered Company")
  .to("direct:processOrder")
  .end()
1 голос
/ 05 марта 2020

См. прямой компонент . Использование «to» вместо «.process»:

.to("direct:processOrder");
...