2016-03-19 13 views
0

Ben rota B çağıran rota A vardır:Deve: iç içe geçmiş bir rotanın EndpointUri alma

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

Ben kendi URI, içine alıcı rota A. değil URI yazdırmak için iç içe rota B istiyorum Bunu nasıl yapabilirim?

cevap

2

Afaik, Bence mümkün olduğunu düşünmüyorum.

UnitOfWorks bir StackContext Yığını bulundurur, ancak bu yığın herkese açık değildir. Ancak, değişimin yönlendirildiği işlemcinin geçmişine erişebilirsiniz. Bu MessageHistory koleksiyonu, bir başlık Exchange.MESSAGE_HISTORY'da bulunur. İşlemcinin kimliğini ve uç noktaların (sanitized) uri'sini içerir.

Daha basit/sağlam bir yaklaşım, ben bu tür bilgilerin // iç ayrıntılarını bağlı iyi bir fikir olduğunu sanmıyorum rota B. Şahsen

çağırarak her rotada açıkça bir başlık eklemek için olabilir rota!

0

Rotanıza bir routeId() talimat ekleyin ve rota tanımını erişmek için kullanabilirsiniz:

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

Ben (belli 'routeId' belirterek) en neysem rota bilseydim, o zaman ileriye gidebiliriz ve EndpointUri'yi kodlayın. Soru, hangi yollarda kullanılabileceğini bilmeyen işlemciler için tasarlanmıştır. EndpointUri verilerini değişimden (muhtemelen) almaya çalışıyorum. – rapt

+0

Üzgünüz, sorunuz başka bir yerde kullanılabilecek bir işlemci anlamına gelmiyordu. Ayrıca, rotayı bildirmeksizin "rotaya bağlı" olmak zorunda olan bir işlemcinin amacı nedir? Daha fazla bilgi ile daha iyi bir cevaba sahip olabiliriz. –

İlgili konular