2017-09-22 1 views
0

J'ai deux itinéraires qui exécutent une commande toutes les 2 secondes sur les différents serveurs et d'imprimer la sortie vers le même fichier:Camel - synchronisez itinéraires

camelCtx.addRoutes(new RouteBuilder() { 
    @Override 
    public void configure() { 
     from("ssh://username:[email protected]:port?delay=2&pollCommand=whoami") 
     .to("file:///tmp/?fileName=test.txt"); 
    } 
}); 
camelCtx.addRoutes(new RouteBuilder() { 
    @Override 
    public void configure() { 
     from("ssh://username:[email protected]:port?delay=2&pollCommand=whoami") 
     .to("file:///tmp/?fileName=test.txt"); 
    } 
}); 

Je voudrais être sûr que les deux voies ont été lancées à en même temps et également préfixer la sortie de chaque commande avec horodatage lorsque l'itinéraire a été démarré. Pour le deuxième problème que j'ai essayé processus personnalisé:

.process(exchange -> { 
    String body = exchange.getIn().getBody(String.class); 
    exchange.getIn().setBody(System.currentTimeMillis() + " " + body); 
}) 

mais il donne évidemment le moment où la sortie a été reçue.
Je peux aussi exécuter date +%s%N avant d'exécuter la commande, de sorte que le paramètre pollCommand ressemblerait à ceci:

...&pollCommand=date +%s%N;whoami"... 

mais dans ce cas, il est le moment où la connexion au serveur est déjà établie, ce qui est un peu trop tard ...

Alors, comment obtenir l '«heure de début» de l'itinéraire?
Et aussi comment synchroniser plusieurs routes afin qu'elles s'exécutent simultanément?

Répondre

1

Si vous voulez dire l'heure à laquelle l'échange (message camel) sur l'itinéraire a été démarré/créé, vous pouvez accéder à cette information à partir de la propriété d'échange.

Par exemple à partir d'un chameau Processor que vous pouvez faire:

Date created = exchange.getProperty(Exchange.CREATED_TIMESTAMP, Date.class); 

Vous pouvez utiliser ces informations pour créer un nom de fichier que vous pouvez définir avec l'en-tête Exchange.FILE_NAME quand alors Override le nom de fichier configuré dans le uri point final , de sorte que vous pouvez inclure l'horodatage.