Premiers pas avec Mule ESB

Débuter avec Mule ESB

1. Vue d'ensemble

Mule ESB est un Enterprise Service Bus léger basé sur Java. Il permet aux développeurs de connecter plusieurs applications ensemble en échangeant des données dans différents formats. Il transporte des données sous forme de message.

ESB offre des fonctionnalités puissantes en fournissant un certain nombre de services, tels que:

  • Création de service et hébergement

  • Service de médiation

  • Routage des messages

  • Transformation de données

Nous trouverons ESB utile si nous devons intégrer plusieurs applications ensemble, ou si nous avons l’idée d’ajouter plus d’applications à l’avenir.

ESB est également utilisé pour traiter plusieurs types de protocoles de communication et lorsque des capacités de routage de messages sont requises.

Créons un exemple de projet dans la section 5 en utilisantAnyPoint Studio qui est disponible en téléchargementhere.

2. Mule Message Structure

En termes simples, ESB a pour objectif principal d’intervenir entre les services et d’acheminer les messages vers différents points de terminaison. Il doit donc gérer différents types de contenu ou de charge utile.

La structure du message est divisée en deux parties:

  • En-tête de message qui contient les métadonnées du message

  • Message payload - qui contient des données spécifiques à l'entreprise

Message is embedded within a message object. Nous pouvons récupérer l'objet message du contexte. Nous pouvons modifier ses propriétés et sa charge à l'aide de composants Java personnalisés et de transformateurs intégrés à un flux Mule.

Chaque application se compose d'un ou plusieurs flux.

Dans un flux, nous pouvons utiliser des composants pour accéder, filtrer ou modifier un message et ses différentes propriétés.

Par exemple, nous pouvons obtenir une instance d'un message en utilisant un composant Java. Cette classe de composant implémente une interfaceCallable à partir du packageorg.mule.api.lifecycle:

public Object onCall(MuleEventContext eventContext) throws Exception {
    MuleMessage message = eventContext.getMessage();
    message.setPayload("Message payload is changed here.");
    return message;
}

3. Propriétés et variables

Les métadonnées de message sont constituées de propriétés. Les variables représentent des données sur un message. La manière dont les propriétés et les variables sont appliquées tout au long du cycle de vie du message est définie par leurs portées. Properties can be of two types, based on their scope: inbound and outbound.

Inbound properties contiennent des métadonnées qui empêchent le brouillage des messages lors de la traversée des flux. Les propriétés entrantes sont immuables et ne peuvent pas être modifiées par l'utilisateur. Ils ne sont présents que pendant la durée du flux - une fois que le message quitte le flux, les propriétés entrantes ne sont plus présentes.

LesOutbound properties peuvent être définis automatiquement par Mule, ou un utilisateur peut les définir via la configuration de flux. Ces propriétés sont mutables. Elles deviennent des propriétés entrantes lorsqu'un message entre dans un autre flux après avoir franchi des barrières de transport.

Nous pouvons définir et obtenir les propriétés sortantes et entrantes respectivement en appelant les méthodes setter et getter associées dans leurs portées respectives:

message.setProperty(
  "outboundKey", "outboundpropertyvalue", PropertyScope.OUTBOUND);
String inboundProp = (String) message.getInboundProperty("outboundKey");

Il existe deux types de variables disponibles à déclarer dans les applications.

L'une est la variable de flux qui est locale à un flux Mule et disponible pour les flux, sous-flux et flux privés.

Les variables de session une fois déclarées deviennent disponibles dans l'ensemble de l'application.

4. Barrières de transport etflow-ref

Les barrières de transport sont des connecteurs HTTP, des machines virtuelles, JMS ou des connecteurs similaires qui nécessitent des chemins ou des points de terminaison pour que les messages soient routés. Flow variables aren’t available across transport barriers, but session variables are available across the project in all flows.

Lorsque nous avons besoin de créer un sous-flux ou un flux privé, nous pouvons faire référence au flux d'un parent ou d'un autre flux en utilisant le composantflow-ref. Both flow variables and session variables are available in sub-flows and private flows referred using flow-ref.

5. Exemple de projet

Créons une application dans Anypoint Studio qui contient plusieurs flux, qui communiquent entre eux via des connecteurs entrants et sortants.

Regardons le premier flux:

image

 

Nous pouvons configurer un auditeur HTTP comme suit:

Les composants de flux doivent être à l'intérieur d'une balise<flow>. Ainsi, un exemple de flux avec plusieurs composants est:


    
    
    
    
    
    
    

Dans le flux, nous fournissons une référence à un écouteur HTTP configuré. Ensuite, nous gardons un enregistreur pour enregistrer la charge utile que l'écouteur HTTP reçoit via la méthode POST.

Après cela, une classe de transformateur Java personnalisée est placée pour transformer la charge utile après réception du message:

public Object transformMessage(
  MuleMessage message,
  String outputEncoding) throws TransformerException {

    message.setPayload("Payload is transferred here.");
    message.setProperty(
      "outboundKey", "outboundpropertyvalue", PropertyScope.OUTBOUND);
    return message;
}

The transformer class must extend*AbstractMessageTransformer*. Nous définissons également une propriété sortante à l'intérieur de la classe.

À présent, nous avons déjà converti les données utiles dans l'objet de message et les avons enregistrées dans la console à l'aide de l'enregistreur. Nous définissons une variable de flux et une variable de session.

Enfin, nous envoyons notre charge utile via un connecteur de machine virtuelle sortante. The path in VM connector determines the receiving endpoint:

image

Le message transporté et transformé par le flux initial atteintFlow1 via des points de terminaison de VM entrants.

Le composant Java récupère les propriétés sortantes définies par le premier flux et renvoie l'objet qui devient la charge du message. La méthodetransformMessage() pour cette tâche:

public Object transformMessage(
  MuleMessage message,
  String outputEncoding) throws TransformerException {

    return (String) message.getInboundProperty("outboundKey");
}

Ensuite, les variables de flux et de session sont définies sur le second flux. Après cela, nous avons une référence àFlow2 en utilisant le composantflow-ref.

image

DansFlow2,, nous avons transformé le message à l'aide de la classe de composant Java et l'avons consigné dans la console. Nous avons également défini une variable de débitF3.

Après avoir appeléFlow2 en utilisantflow-ref, Flow1 attendra que le message soit traité dansFlow2.

Toute variable de débit définie enFlow1 etFlow2 sera disponible dans les deux flux car ces flux ne sont séparés par aucune barrière de transport.

Enfin, le message est renvoyé au demandeur HTTP via des ordinateurs virtuels. Nous avons configuré tous les ordinateurs virtuels en tant que demande-réponse.

Nous pouvons appeler cette application à partir de n'importe quel client REST en publiant des données JSON dans le corps. L'URL seralocalhost:8081 comme configuré dans l'écouteur HTTP.

6. Création de projets à l'aide de Maven en ligne de commande

Dans le fichiersettings.xml situé dans le répertoire conf de Maven, nous devons inclurepluginGroup:


    org.mule.tools

Nous devons également indiquer à Maven où trouver les référentiels Mule, ce qui doit être inclus dans la balise profile:


    Mule Org
    
        true
    
    
        
            mulesoft-releases
            MuleSoft Repository
            https://repository-master.mulesoft.org/releases/
            default
        
        
            mulesoft-snapshots
            MuleSoft Snapshot Repository
            https://repository-master.mulesoft.org/snapshots/
            default
        
    

Maintenant, nous pouvons facilement lancer un projet Maven en utilisant la commande:

mvn mule-project-archetype:create -DartifactId=muleesb -DmuleVersion=3.8.1

Après avoir configuré notre projet, nous pouvons créer une archive déployable à l'aide de la commandemvn package. Nous pouvons maintenant déployer l'archive dans le dossierapps de n'importe quel serveur Mule autonome.

7. Conclusion

Dans cet article, nous avons passé en revue différents concepts nécessaires pour créer une application ESB dans Mule. Nous avons créé un exemple de projet illustrant tous les concepts décrits.

Nous pouvons maintenant commencer à créer une application ESB en utilisant Anypoint Studio pour répondre à nos divers besoins.

Comme d'habitude, le projet complet peut être trouvéover on GitHub.