2012-04-03 3 views
3

Ich habe einen einfachen dynamischen Router einrichten:Legendes Apache Camel Dynamisches Routing

public String slip(String body, @Header(Exchange.SLIP_ENDPOINT) String previous) { 
       if (previous == null) { 
        return "mock:a"; 
       } 
        else if (body.contains("status=2")) { 
        return "mock:b"; 
       } 
        else if (body.contains("status=3")) { 
        return "mock:c"; 
       } 

       // no more so return null 
       return null; 
      } 

Mock a, b, c sind Routen mit kundenspezifischen Prozessoren.

public void process(Exchange exchange) throws Exception { 
     String str_request = ""; 
     String str_requestNew = ""; 

     str_request = (String) exchange.getIn().getBody(); 

     if(str_request.contains("status=1")) 
      str_requestNew = "status=2"; 
    } 
  1. Wie ich den Nachrichtentext zwischen Strecken in meinem benutzerdefinierten Prozessor über Java DSL aktualisiere. exchange.getOut(). SetBody (newreq); ?

  2. Muss ich einen neuen Producer erstellen und die Nachricht zurück an den dynamischen Router senden? ProducerTemplate-Vorlage = exchange.getContext(). CreateProducerTemplate(); template.sendBody (myDynamicRouterEndpoint, newreq); oder wird mein Router den neuen Körper abholen, wenn Sie über das Verfahren 1.

Oder gibt es einen großen Fehler alle zusammen in meiner Logik? :)

Antwort

3

Sie können es tun, wie Sie in 1.

beschreiben Noch einfacher ist es, wenn Sie die Bean-Komponente verwenden. Dann können Sie eine einfache Java-Methode haben zum Lesen und Einstellen des Körpers:

public String doSomething (String Körper) { }

Diese den Körper in dem Parameter erhalten wird und der Rückgabewert wird der neue Körper . Dies macht Ihre Bohne auch unabhängig von Camel.

+0

Ah ok. das ist hilfreich, danke. Muss ich über "to (routerEndpoint)" zurück zum dynamischen Router routen oder wird Camel das automatisch tun, solange der Body aktualisiert wird? – esimran

+0

Ja Camel ruft den dynamischen Router an, bis Ihre Bean null zurückgibt. Null ist das Signal zur dynamischen Route, das ist getan. Wenn Sie eine Kopie des Buches Camel in Action haben, lesen Sie Kapitel 8, wo dieses Muster behandelt wird, und wir haben eine Anzahl von Beispielen im Quellcode, die Sie ebenfalls betrachten können. Und die Dokumentation bei Apache enthält auch einige Berichte und Beispiele: http://camel.apache.org/dynamic-router –