Camel: Routing Slip

Pendant le développement, nous rencontrons souvent le problème de routage et de traitement de messages. Par exemple, vous devez créer une application dont le but est de trier les messages dynamiquement et de les traiter selon vos besoins.

Dans un projet récent, nous avons opté pour le pattern : « Routing Slip » comme solution.

Pendant le développement, nous rencontrons souvent le problème de routage et de traitement de messages. Par exemple, vous devez créer une application dont le but est de trier les messages dynamiquement et de les traiter selon vos besoins.

Dans un projet récent, nous avons opté pour le pattern : « Routing Slip » comme solution.

Le « Routing Slip » agit comme un routeur dynamique, il prend des décisions pour dispatcher les messages. Voici, le fonctionnement de ce pattern:
le message entrant porte une information « slip » dans l'entête du message qui indique la séquence des étapes de traitement. Le processeur « Routing Slip » va lire cette information et s'en servir pour traiter le message selon l'ordre définit.

Par exemple, le message entrant avec un fichier joint qu'indique la séquence des étapes de traitement. Le pattern va lire ce fichier et le dispatcher selon les points dans la liste.

Pour démarrer le pattern « Routing Slip », soit on puisse mettre les informations dans l'en-tête du message, soit on puisse préparer une « Expressions » comme le fichier joint dans le message. Et tout d'abord, tous les infomations de « Slip » doivent être préparés avant d'envoyer le message.

Dans cet article, on va présenter la solution de stocker le « Slip » dans l'en-tête du message.

Étape 1 : Création d'un processeur simple.

/**
 * Routeur dynamique dont but est d'envoyer les requêtes aux leurs ponits correspondants.
 * 
 * @author laiyin
 */
public class DnsDynamicRouter implements Processor
{
	/**
	 * le plan des itinéraires
	 */
	private Map<String, String> exempleMap = null;
	
	/**
	 * le log
	 */
	private Logger logger = null;

	/**
	 * Distribuer les messages selon l'information dans l'en-tête du message.
	 * 
	 * @param exchange le message envoyé de la côté du client.
	 * @throws Exception l'exception s'est produite lors de l'opération.
	 */
    @Override
    public void process(final Exchange exchange) throws Exception
    {
        final String slip = (String) exchange.getIn().getHeader("slip");
        
        getLogger().debug("Slip : " + operation);
        
        final String route = getExempleMap().get(slip);
        
        if (route != null)
        {
            exchange.getIn().setHeader("dynamicRoute", route);
        } else {
            exchange.getIn().setHeader("dynamicRoute", "");
        }
    }

Ce processeur joue un rôle important au sein du mécanisme « Routing Slip » puisqu'il va distribuer les messages aux destinataires correspondants en fonction de l'information contenue dans l'en-tête.

Étape 2 : Déclaration du processeur dans le contexte Spring.

<bean id="exemple.slip.router"
     class="exemple.RoutingSlipExemple">
      <property name="exempleMap">
         <map>
             <!-- si le message de "slip" corresponds à "slip1", il serait distribué à la route "direct:exemple.slip.routing1" -->
             <entry key="slip1" value="direct:exemple.slip.routing1"/>
            <!-- si le message de "slip" corresponds à "slip2", il serait distribué à la route "direct:exemple.slip.routing2" -->
            <entry key="slip2" value="direct:exemple.slip.routing2"/>
             <!-- si le message de "slip" corresponds à "slip3", il serait distribué à la route "direct:exemple.slip.routing3" -->
             <entry key="slip3" value="direct:exemple.slip.routing3"/>
         </map>
       <property name="logger" ref="logger" />
 </bean>

Étape 3 : Configuration de la route.

from("activemq:slip.routing.request")
    	.beanRef("exemple.slip.routeur")
    	.routingSlip(header("dynamicRoute"), ",");

Référence :
http://camel.apache.org/routing-slip.html

Un commentaire

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.