web-dev-qa-db-fra.com

Apache Camel: point de terminaison "direct: start" - qu'est-ce que cela signifie?

Je suis nouveau sur Apache Camel. Quelqu'un peut-il expliquer ce que "direct: start" signifie dans Camel. S'il te plait regarde 

http://camel.Apache.org/http

from("direct:start")
.to("http://myhost/mypath");

Merci. 

39
Soumya Simanta

Le "direct: start" ci-dessus indique simplement que la route commence par un composant direct nommé "start".

Le point d'extrémité direct fournit un appel synchrone d'une route. Si vous souhaitez envoyer un Exchange au point de terminaison direct: start, vous devez créer un ProducerTemplate et utiliser les différentes méthodes d'envoi.

ProducerTemplate template = context.createProducerTemplate();

template.sendBody("direct:start", "This is a test message");

Le nom start n'a rien de spécial. Il s’agit simplement du nom que vous allez utiliser pour faire référence au système d'extrémité et aurait tout aussi bien pu être direct:foo.

47
gregwhitaker

Supposons que la route directe soit une méthode dont le nom commence, nous devons donc appeler la méthode de démarrage/la route directe pour effectuer certaines opérations. L'exemple ci-dessous aidera.

Le premier itinéraire sera déclenché lorsqu'un fichier d'entrée est disponible à l'emplacement XXXX et lorsqu'il atteint la ligne, le flux réel passera à un deuxième itinéraire. Fondamentalement, la route directe avec le point final sera déclenchée par un point final producteur.

<route id="fileRoute">
   <from uri="file:XXXX">
      ..
   <to uri="direct:start">
</route>

<route id="directStartRoute">
    <from uri="direct:start">
    <to uri="http://myhost/mypath">
</route>
6
selva

Apache Camel direct sert essentiellement à envoyer Exchange d'un itinéraire à un autre dans le contexte SAME Camel. Imaginons donc que vous receviez un message d’AMQ et que vous souhaitiez renseigner les en-têtes de chaque message reçu, puis l’envoyer à la liste des destinataires du courrier. Donc, ici, vous devez créer un nouveau routeur qui a la description suivante

from(“direct:populateHeaders”)
.setHeader(“myHeader”, “myHeaderValue”)
.end()

Et de n'importe quelle route, vous pouvez envoyer votre objet Exchange à cette route en écrivant

...

.to(“direct:populateHeaders”)

...

Il est important de garder à l'esprit que cela ne fonctionnera pas en dehors de votre contexte Camel.

4
Arman Tumanyan

direct: start fournit des moyens synchrones de communiquer entre 2 points de terminaison. Cette option est utilisée uniquement si vous souhaitez communiquer à l'aide de messages Camel et non de fichiers génériques ou de messages XML.

2
Atul Kumar

Considérez-le comme suit: Il y a deux choses lorsque vous envoyez un message à Camel Route. 1. Le schéma d'URI, qui définit la manière dont votre message sera envoyé. Et à quel type de composant il va être livré . 2. Chemin d'URI, qui définit l'instance de ce composant.

A présent, pour votre accès direct: emplacement de départ . 'Direct' indique que ce message doit être envoyé de manière synchrone au composant direct . 'Start' indique à quelle instance du composant direct ce message doit être remis.

Importance du chemin d’URI différent: .__ Maintenant, considérez si vous avez des itinéraires différents. Et veut produire un message à partir de deux threads différents de manière synchrone. L'utilisation de 'direct: start' comme point de départ pour les itinéraires ne fonctionnera pas. Sauf si vous rencontrez un composant de traitement conditionnel, oubliez ceci si vous êtes débutant. Pour que les messages soient correctement envoyés aux deux routes, vous devrez ajouter 2 entrées, à savoir 'direct: somename1' et 'direct: somename2'. 'démarrer' n'est pas une obligation, vous pouvez donner le nom de votre choix. 

Je vous recommande de lire quelques chapitres des livres EIP de Martin Fowler. C'est une merveilleuse ressource pour commencer. Cela vous rendra très facile à comprendre Camel.

1
Mudassir Rehman