2016-03-19 4 views
0

I Route A habe, die Route B ruft:Camel: getting endpointURI einer verschachtelten Route

from("direct:a") 
.to("direct:b"); 

from("direct:b") 
.process(new Processor() { 
     @Override 
     public void process(Exchange exchange) throws Exception 
     { 
      System.out.println("Route B URI: " + exchange.getUnitOfWork().getRouteContext().getFrom().getEndpointUri()); //oops, prints direct:a 
     } 
    }); 

Ich würde die verschachtelte Route B wie seine eigene URI auszudrucken, nicht den URI der kapsel Route A. Wie könnte ich es tun?

Antwort

2

Afaik, ich glaube nicht, dass es möglich ist, wie es ist.

Die UnitOfWorks behalten einen Stack von RouteContext, aber dieser Stack ist nicht öffentlich zugänglich. Sie können jedoch auf den Verlauf des Prozessors zugreifen, in dem der Austausch durchgeführt wurde. Diese Sammlung von MessageHistory befindet sich in einer Kopfzeile Exchange.MESSAGE_HISTORY. Es enthält die ID des Prozessors und (sanitized) uri der Endpunkte.

Ein einfacherer/robusteren Ansatz kann auf jeder Strecke explizit einen Header hinzuzufügen, seinen Aufruf die Route B.

Ich persönlich glaube nicht, es ist eine gute Idee, auf diesen Informationen // interne Details von abzuhängen die Route!

0

hinzufügen routeId() Anweisung zu Ihrer Route und benutzt, um Ihre Route Definition zuzugreifen:

from("direct:b") 
    .routeId("routeB") 
    .process(new Processor() { 
      @Override 
      public void process(Exchange exchange) throws Exception { 
       System.out.println("Route B URI: " + exchange.getContext().getRoute("routeb").getFrom().getEndpointUri()); 
      } 
    }); 
+0

Wenn ich weiß, welchen Weg ich bin (durch einen gewisse 'routeId' Angabe), dann könnte ich voran gehen und Hardcode die EndpointUri. Die Frage ist für Prozessoren gedacht, die nicht wissen, in welchen Routen sie verwendet werden können. Ich versuche, die EndpointUri-Daten vom Exchange (wahrscheinlich) zu bekommen. – rapt

+0

Entschuldigung, Ihre Frage bezog sich nicht auf einen Prozessor, der irgendwo anders verwendet werden könnte. Auch was ist der Zweck eines Prozessors, der so "routenabhängig" sein muss, ohne die Route implizit zu deklarieren? Mit mehr Informationen können wir eine bessere Antwort haben. –

Verwandte Themen