2016-12-09 5 views
0

Ich habe eine Kamel Route (Hauptroute), die eine Seife Web-Service aufruft und speichert das Ergebnis von Seife Service in die Datenbank. Mein Kamel Kontext ist wie folgt.Wie camel Komponenten parallel laufen

<route id="HttpRoute"> 
    <from uri="jetty:http://127.0.0.1:8889/Getdata"/> 
    <to uri="direct:start"/> 
</route> 

<route id="TimerRoute"> 
    <from uri="timer://getdata?period=10000"/> 
    <to uri="direct:start"/> 
</route> 

<route id="main-route"> 
    <from uri="direct:start"/> 
    <process ref="soapRequestGenerator" /> 
    <marshal> 
     <jaxb contextPath="org.sample.camel" fragment="true" namespacePrefixRef="namespacePrefixMap"/> 
    </marshal> 
    <convertBodyTo type="java.lang.String"/> 
    <to uri="velocity:soapRequest.vm"/> 
    <setHeader headerName="operationName"> 
     <constant>soapOperationName</constant> 
    </setHeader>      
    <to uri="cxf:bean:soapServiceEndpoint"/> 
    <convertBodyTo type="java.lang.String"/> 
    <process ref="soapResponseProcessor" />  //task-0 
    <setBody> 
     <simple> 
      insert into table(Id,col1,col2) values(:?id,:?val1,:?val2); 
     </simple> 
    </setBody> 
    <to uri="jdbc:dataSource?useHeadersAsParameters=true"/>  //task-1    
    <to uri="velocity:soapResponse.vm"/>      //task-2 
</route> 

Jetzt gibt es zwei Möglichkeiten Hauptroute zu nennen.

1) über Timer (TimerRoute), der periodisch ausgeführt wird und die Hauptroute aufruft, um Daten in der Datenbank zu speichern.

2) via http (REST) ​​-Aufruf, der die zurückgegebene Antwort vom Soap-Dienst erfordert, um in db gespeichert und an den Aufrufer (REST) ​​zurückgegeben zu werden.

Jetzt möchte ich Aufgabe-1 und Aufgabe-2 von Hauptroute parallel auszuführen, wenn sie über HttpRoute aufgerufen, weil sie unabhängig sind. Daten, die von diesen beiden Aufgaben benötigt werden, können vorbereitet und in Kopfzeilen bei Aufgabe 0 gespeichert werden, aber ich weiß nicht, wie das geht. Außerdem möchte ich Task 2 nicht ausführen, wenn Hauptroute über TimerRoute aufgerufen wird. Wie geht das ?

Ich möchte auch in die Datenbank einchecken, bevor Sie die vom Soap-Service empfangenen Datensätze einfügen, um doppelte Datensätze in der Datenbank zu vermeiden. Diese Überprüfung kann parallel zu einem Soap-Service-Aufruf durchgeführt werden (um den Durchsatz zu erhöhen), und basierend auf dieser Notwendigkeit, zu entscheiden, werden Wetterdatensätze eingefügt oder aktualisiert.

Antwort

0

die Fragen Aufzählen Sie gefragt haben hier

  1. Um verschiedene Strömungen zu folgen basierend auf Source-Route, können Sie einen Header in der Source-Route festgelegt und in der Hauptroute verwenden, um mit Router oder Choice
  2. Um Task-1 und Task-2 parallel auszuführen, verwenden Sie Multicast
  3. Verwenden Sie einen DB-Prozessor, um die Datenbankprüfung auszuführen. Sie können Multicast verwenden, um die Anrufe parallel zu senden
Verwandte Themen