2016-04-08 2 views
3

Ich versuche eine Route zu erstellen, die http URL mit CSV-Datei zugreifen und einfach den Inhalt davon drucken kann. Leider wird die Datei kontinuierlich gelesen.Wie kann ich csv-Datei mit Apache Camel nur einmal von http lesen?

  1. Ist es möglich, es nur einmal zu lesen und dann die Verarbeitung zu stoppen?
  2. Warum funktioniert "direct: start" in diesem Beispiel nicht und ich muss Timer verwenden?

Hier ist mein Code:

context.addRoutes(new RouteBuilder() { 
      public void configure() { 
       from("timer://start?delay=5000") 
         .to("http4://127.0.0.1:18080/data.csv") 
         .unmarshal().csv() 
         .process(new Processor() { 
          @Override 
          public void process(Exchange exchange) throws Exception { 
           String list = exchange.getIn().getBody(String.class); 
           log.info(list); 
        //Here I would like to stop the route when file reading is finished 
          } 
         }); 
     }); 

Dank!

+0

Haben Sie einen Blick auf die offizielle Dokumentation? [http://camel.apache.org/how-can-i-stop-a-route-from-a-route.html](http://camel.apache.org/how-cani-i-stop- a-route-from-route.html) – Frank

Antwort

2

Der Timer ruft alle 5 Sekunden an. Wenn Sie den Timer nur einmal anrufen möchten, können Sie repeatCount=1: http://camel.apache.org/timer

setzen. Sie müssen jedoch in Betracht ziehen, möchten Sie es nur einmal ausführen lassen. Was ist, wenn Sie diese HTTP-URL später erneut aufrufen müssen?

Und auch Frank kommentierte es eine Möglichkeit ist, eine Route von einer Route zu stoppen: http://camel.apache.org/how-can-i-stop-a-route-from-a-route.html

+1

Ja .., @Peters_, Es ist eine Frage des Hinzufügens der Ausnahmebehandlung in Ihren Routen. 1. Was, wenn der HTTP-Aufruf wegen Verbindungsproblemen fehlgeschlagen ist? 2. Oder wenn es eine Verbindungsausnahme gibt? Vielleicht möchten Sie diese Route auch einmal täglich ausführen? Es gibt so viele Dinge, die Sie tun können, es hängt davon ab, welchen Anwendungsfall Sie erreichen möchten. – gnanagurus

+0

Eigentlich möchte ich diese Route immer dann starten, wenn HTTP-Anfragen zu meiner zweiten Route kommen, die Jetty zum Abhören an einem anderen Port benutzt. Wenn es eine HTTP-Anfrage gibt, möchte ich die Hauptroute starten, die CSV-Datei verarbeiten und die Route stoppen. Es sollte möglich sein, es zu wiederholen. –