2012-05-04 15 views
9

Come posso aggiungere un percorso cammello in fase di esecuzione in Java? Ho trovato un esempio di Grails ma l'ho implementato in Java.Aggiungi percorso cammello in fase di esecuzione in Java

Il mio applicationContext.xml ha già alcune route statiche predefinite e voglio aggiungere alcuni percorsi dinamici ad esso in fase di esecuzione. È possibile? Perché l'unico modo per includere la rotta dinamica è scrivere il route.xml e quindi caricare la definizione della rotta in contesto. Come funzionerà sulle rotte statiche esistenti? Route at runtime

risposta

14

si può semplicemente chiamare alcuni API differenti sul CamelContext aggiungere percorsi ... qualcosa di simile

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); 
    } 
} 

vedono questo test di unità per l'esempio completo ...

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

+0

Grazie per la vostra risposta, ma sto cercando un modo più configurabile per farlo. Nel mio caso un'applicazione esterna può decidere i percorsi della mia applicazione, sto cercando una soluzione più configurabile a questo problema –

+1

La soluzione sopra sembra abbastanza configurabile per me. Vuoi che il percorso completo sia dinamico? Quindi puoi usare solo xml. –

+0

È tutto il codice Java, quindi all'interno del metodo configure è possibile utilizzare if .. else, chiamare altri metodi ecc. In questo modo è possibile rendere la DSL molto dinamica. Puoi anche avere il numero X di classi template da usare ecc. E se non ti piace il DSL in RouteBuilder, puoi costruire percorsi usando direttamente le classi nel pacchetto del modello. –

1

@Himanshu, Si prega di dare un'occhiata alle opzioni di dynamicroute (in altre parole, routing slip) che possono aiutarti a indirizzare dinamicamente a diverse "destinazioni" basate su cer condizione normale

Controllare il collegamento di guida router dinamico nel sito cammello;

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

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

E all'interno del metodo di scorrimento;

/** 
* Use this method to compute dynamic where we should route next. 
* 
* @param body the message body 
* @return endpoints to go, or <tt>null</tt> 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; 
} 

Speranza che aiuta ...

Grazie.

Problemi correlati