Добавить маршрут верблюда во время выполнения в Java

Как добавить маршрут верблюда во время выполнения на Java? Я нашел пример Grails, но я реализовал его на Java.

У моего приложенияContext.xml уже есть определенные предопределенные статические маршруты, и я хочу добавить к нему динамические маршруты во время выполнения. Является ли это возможным? Поскольку единственный способ включить динамический маршрут – написать route.xml, а затем загрузить определение маршрута в контекст. Как он будет работать на существующих статических маршрутах? Маршрут во время выполнения

вы можете просто вызвать несколько различных API-интерфейсов в CamelContext для добавления маршрутов … что-то вроде этого

context.addRoutes(new MyDynamcRouteBuilder(context, "direct:foo", "mock:foo")); .... private static final class MyDynamcRouteBuilder extends RouteBuilder { private final String from; private final String to; private MyDynamcRouteBuilder(CamelContext context, String from, String to) { super(context); this.from = from; this.to = to; } @Override public void configure() throws Exception { from(from).to(to); } } 

см. этот модульный тест для полного примера …

https://svn.apache.org/repos/asf/camel/trunk/camel-core/src/test/java/org/apache/camel/builder/AddRoutesAtRuntimeTest.java

@Himanshu, Пожалуйста, взгляните на динамические параметры (другими словами, прокрутку маршрута), которые могут помочь вам динамически маршрутизировать в разные «пункты назначения» на основе определенных условий.

Проверьте ссылку на помощь динамического маршрутизатора на сайте верблюда;

http://camel.apache.org/dynamic-router.html

 from("direct:start") // use a bean as the dynamic router .dynamicRouter(method(DynamicRouterTest.class, "slip")); 

И внутри метода скольжения;

 /** * Use this method to compute dynamic where we should route next. * * @param body the message body * @return endpoints to go, or null to indicate the end */ public String slip(String body) { bodies.add(body); invoked++; if (invoked == 1) { return "mock:a"; } else if (invoked == 2) { return "mock:b,mock:c"; } else if (invoked == 3) { return "direct:foo"; } else if (invoked == 4) { return "mock:result"; } // no more so return null return null; } 

Надеюсь, поможет…

Благодарю.

Interesting Posts
Давайте будем гением компьютера.