Aller au contenu principal
~/GiwiSoft
Camel 726344

Tracer sa route avec Camel

Giwi 3 min de lecture Java, Camel

Dans le cycle de développement de routes Camel, la phase la plus importante est la conception. Cette conception consiste à dessiner les routes en utilisant les EIP, le nom des routes et en spécifiant le format des messages. Il y a deux solutions pour dessiner ces routes.

Les deux solutions sont :

LibreOffice

LibreOffice ou OpenOffice (au choix) Draw avec cette librairie de composants : http://sites.google.com/site/rogersearjeant/eip-shapes-for-openoffice-draw

Tracer sa route avec Camel

Fuse IDE for Camel

L’IDE (plugin Eclipse) de Fuse qui semble assez prometteur : http://fusesource.com/fuse/camel-beta/

Tracer sa route avec Camel

Ce plugin permet de tracer sa route en la liant aux beans Spring et de générer un Camel-context. Je n’ai pas vraiment eu le temps de le testé, mais le peux que j’en ai vu, j’ai regretté l’absence du copier/coller et du drag&drop de boiboites. Il est très fortement typé Maven. Cependant, ce n’est qu’une version bêta. A suivre…

Tracer les routes programmatiquement avec getRouteDefinition()

Depuis Camel 2.x, vous pouvez interroger le CamelContext pour obtenir la définition d’une route et inspecter ses étapes :

CamelContext context = new DefaultCamelContext();
context.addRoutes(new RouteBuilder() {
@Override
public void configure() {
from("file:data/inbox")
.to("jms:queue:orders");
}
});
context.start();

// Récupérer une route par son ID
RouteDefinition route = context.getRouteDefinition("route1");
System.out.println("Route: " + route.getId());
route.getOutputs().forEach(node ->
System.out.println(" -> " + node.getClass().getSimpleName()));

Activer le Tracer de Camel

Camel intègre un mécanisme de trace qui logue chaque message à chaque étape de la route. Idéal en développement :

context.setTracing(true);
// ou dans un fichier Spring XML :
// <camelContext trace="true" xmlns="http://camel.apache.org/schema/spring">

Avec tracing=true, Camel affiche dans les logs chaque message entrant/sortant, le nom de la route et le nœud visité. Combinez-le avec LoggingLevel pour filtrer :

from("file:data/inbox")
.log(LoggingLevel.DEBUG, "Message reçu: ${body}")
.to("jms:queue:orders");

Camel Debugger (outil moderne)

Les Camel IDE modernes (VS Code avec l’extension Camel Debugger, ou Tooling for Apache Camel dans Red Hat CodeReady Studio) permettent de :

  • Placer des breakpoints sur les nœuds d’une route
  • Inspecter le contenu des messages (body, headers, exchange properties)
  • Avancer pas à pas dans le flux EIP
  • Visualiser les routes graphiquement

Tester les routes avec CamelTestSupport

Pour du TDD, CamelTestSupport permet de démarrer un contexte Camel pour chaque test, avec mocks :

public class MonRouteTest extends CamelTestSupport {

@Override
protected RouteBuilder createRouteBuilder() {
return new RouteBuilder() {
@Override
public void configure() {
from("direct:start")
.transform(body().regexReplaceAll(",", ";"))
.to("mock:result");
}
};
}

@Test
public void testTransformation() {
template.sendBody("direct:start", "a,b,c");
MockEndpoint mock = getMockEndpoint("mock:result");
mock.expectedMessageCount(1);
mock.expectedBodiesReceived("a;b;c");
assertMockEndpointsSatisfied();
}
}

CamelTestSupport s’occupe de tout : création du contexte, gestion du cycle de vie, templates de test. Ajoutez simplement la dépendance camel-test dans votre pom.xml.