2014-01-21 8 views
0

Я новичок в верблюде Apache. У меня очень распространенный случай использования, который я пытаюсь настроить маршрут верблюда. Вариант использования - принять контекст выполненияApache верблюд вложенные маршруты

  1. Обновление базы данных с использованием контекста выполнения.
  2. Затем, используя событие в контексте выполнения, создайте байтовое сообщение и отправьте по MQ.
  3. Затем на следующем этапе снова используйте контекст выполнения и выполните обработку событий.
  4. Обновление базы данных с использованием контекста выполнения.

В основном это своего рода вложенные маршруты. В приведенной ниже конфигурации мне нужно иметь доступ к исполняемому коду, который был создан execController в процедурах updateSchedulerState, sendNotification, processEvent и updateSchedulerState, т.е. аннотированных как 1,2, 3 и 4 соответственно.

from("direct:processMessage") 
    .routeId("MessageExecutionRoute") 
    .beanRef("executionController", "getEvent", true) 
    .beanRef("executionController", "updateSchedulerState", true) (1) 
    .beanRef("executionController", "sendNotification", true)  (2) 
       .beanRef("messageTransformer", "transform", true)  
       .to("wmq:NOTIFICATION") 
    .beanRef("executionController", "processEvent", true)   (3) 
       .beanRef("eventProcessor", "process", true) 
       .beanRef("messageTransformer", "transform", true)  
       .to("wmq:EVENT") 
    .beanRef("executionController", "updateSchedulerState", true); (4) 

Пожалуйста, дайте мне знать, как мне настроить маршрут для вышеуказанного варианта использования.

Спасибо, Vaibhav

ответ

0

Так что вам нужно открыть executionContext в ваших бобов в различных точках маршрута?

Если я правильно понял, вы можете поместить этот executeContext в обмен Property, и он будет сохраняться на протяжении всего маршрута.

Установка свойства обмена может быть сделан с помощью функции Exchange.setProperty() метода или различного верблюда Dsl, таких как например:

from("direct:xyz) 
    .setProperty("awesome", constant("YES")) 
    //... 

Вы можете получить доступ к обмену свойствам из фасоли, добавив метод аргумент типа Exchange, как это:

public class MyBean { 
    public void foo(Something something, Exchange exchange) { 
     if ("YES".equals(exchange.getProperty("awesome"))) { 
      // ... 
     } 
    } 
} 

Или через @Property как это:

public class MyBean { 
    public void foo(Something something, @Property String awesome) { 
     if ("YES".equals(awesome)) { 
      // ... 
     } 
    } 
} 

Предполагается, что вы используете более поздние версии верблюда.

Помогает ли это?

Смежные вопросы