Erste Schritte mit Mule ESB

Erste Schritte mit Mule ESB

1. Überblick

Mule ESB ist ein leichter Java-basierter Enterprise Service Bus. Entwickler können mehrere Anwendungen miteinander verbinden, indem sie Daten in verschiedenen Formaten austauschen. Es überträgt Daten in Form einer Nachricht.

ESB bietet leistungsstarke Funktionen durch die Bereitstellung einer Reihe von Diensten wie:

  • Serviceerstellung und Hosting

  • Servicevermittlung

  • Nachrichtenweiterleitung

  • Datentransformation

Wir werden ESB nützlich finden, wenn wir mehrere Anwendungen zusammen integrieren müssen oder wenn wir in Zukunft weitere Anwendungen hinzufügen möchten.

ESB wird auch verwendet, um mit mehr als einem Typ von Kommunikationsprotokollen umzugehen und wenn Nachrichtenroutingfunktionen erforderlich sind.

Erstellen wir in Abschnitt 5 ein Beispielprojekt mitAnyPoint Studio, das zum Herunterladen vonhere zur Verfügung steht.

2. Mule Message Structure

Einfach ausgedrückt besteht der Hauptzweck von ESB darin, zwischen Diensten zu vermitteln und Nachrichten an verschiedene Endpunkte weiterzuleiten. Es muss sich also mit verschiedenen Arten von Inhalten oder Nutzdaten befassen.

Die Nachrichtenstruktur gliedert sich in zwei Teile:

  • Nachrichtenkopf, der Nachrichtenmetadaten enthält

  • Nutzdaten für Nachrichten - Enthält geschäftsspezifische Daten

Message is embedded within a message object. Wir können das Nachrichtenobjekt aus dem Kontext abrufen. Wir können seine Eigenschaften und Nutzdaten mithilfe benutzerdefinierter Java-Komponenten und -Transformatoren in einem Mule-Flow ändern.

Jede Anwendung besteht aus einem oder mehreren Flows.

In einem Flow können Sie mithilfe von Komponenten auf eine Nachricht und ihre verschiedenen Eigenschaften zugreifen, diese filtern oder ändern.

Beispielsweise können wir mithilfe der Java-Komponente eine Instanz einer Nachricht abrufen. Diese Komponentenklasse implementiert eineCallable-Schnittstelle aus demorg.mule.api.lifecycle-Paket:

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

3. Eigenschaften und Variablen

Nachrichtenmetadaten bestehen aus Eigenschaften. Variablen repräsentieren Daten zu einer Nachricht. Wie Eigenschaften und Variablen über den gesamten Lebenszyklus einer Nachricht angewendet werden, wird durch ihre Bereiche definiert. Properties can be of two types, based on their scope: inbound and outbound.

Inbound properties enthalten Metadaten, die verhindern, dass Nachrichten beim Durchlaufen von Flows verschlüsselt werden. Eingehende Eigenschaften sind unveränderlich und können vom Benutzer nicht geändert werden. Sie sind nur für die Dauer des Flusses vorhanden. Sobald die Nachricht den Fluss verlässt, sind eingehende Eigenschaften nicht mehr vorhanden.

Outbound properties können von Mule automatisch eingestellt werden, oder ein Benutzer kann sie über die Flusskonfiguration einstellen. Diese Eigenschaften sind veränderlich. Sie werden zu eingehenden Eigenschaften, wenn eine Nachricht nach dem Überqueren von Transportschranken in einen anderen Nachrichtenfluss gelangt.

Wir können Outbound- und Inbound-Eigenschaften festlegen und abrufen, indem wir die zugehörigen Setter- und Getter-Methoden in ihren jeweiligen Bereichen aufrufen:

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

Es gibt zwei Arten von Variablen, die in Anwendungen deklariert werden können.

Eine ist die Flussvariable, die für einen Mule-Fluss lokal ist und für den Fluss, die Unterflüsse und die privaten Flüsse verfügbar ist.

Einmal deklarierte Sitzungsvariablen sind in der gesamten Anwendung verfügbar.

4. Transportbarrieren undflow-ref

Transportbarrieren sind HTTP-Connectors, VMs, JMS oder ähnliche Connectors, für deren Weiterleitung Pfade oder Endpunkte erforderlich sind. Flow variables aren’t available across transport barriers, but session variables are available across the project in all flows.

Wenn wir einen Unterfluss oder einen privaten Fluss erstellen müssen, können wir mit der Komponenteflow-refauf den Fluss von einem übergeordneten oder einem anderen Fluss verweisen. Both flow variables and session variables are available in sub-flows and private flows referred using flow-ref.

5. Beispielprojekt

Erstellen Sie in Anypoint Studio eine Anwendung, die mehrere Flows enthält, die über eingehende und ausgehende Connectors miteinander kommunizieren.

Schauen wir uns den ersten Fluss an:

image

 

Wir können einen HTTP-Listener wie folgt konfigurieren:

Durchflusskomponenten müssen sich innerhalb eines<flow>-Tags befinden. Ein Beispielablauf mit mehreren Komponenten lautet also:


    
    
    
    
    
    
    

Innerhalb des Ablaufs stellen wir einen Verweis auf einen konfigurierten HTTP-Listener bereit. Dann führen wir einen Logger, um die Nutzdaten zu protokollieren, die der HTTP-Listener über die POST-Methode empfängt.

Danach wird eine benutzerdefinierte Java-Transformer-Klasse platziert, die die Nutzdaten nach dem Empfang der Nachricht umwandelt:

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*. Wir legen auch eine ausgehende Eigenschaft innerhalb der Klasse fest.

Jetzt haben wir bereits Nutzdaten innerhalb des Nachrichtenobjekts konvertiert und diese in der Konsole mit dem Logger protokolliert. Wir legen eine Flussvariable und eine Sitzungsvariable fest.

Schließlich senden wir unsere Nutzdaten über den ausgehenden VM-Connector. The path in VM connector determines the receiving endpoint:

image

Die vom anfänglichen Fluss übertragene und transformierte Nachricht erreichtFlow1 über eingehende VM-Endpunkte.

Die Java-Komponente ruft ausgehende Eigenschaften ab, die vom ersten Flow festgelegt wurden, und gibt das Objekt zurück, das zur Nutzlast der Nachricht wird. DietransformMessage()-Methode für diese Aufgabe:

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

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

Dann werden die Fluss- und Sitzungsvariablen auf den zweiten Fluss gesetzt. Danach erhalten wir einen Verweis aufFlow2 mit der Komponenteflow-ref.

image

InFlow2, haben wir die Nachricht mithilfe der Java-Komponentenklasse transformiert und in der Konsole protokolliert. Wir haben auch eine DurchflussvariableF3 festgelegt.

Nach dem Aufruf vonFlow2 mitflow-ref, Flow1 wird darauf gewartet, dass die Nachricht inFlow2. verarbeitet wird

Jede inFlow1 undFlow2 festgelegte Flussvariable ist in beiden Flüssen verfügbar, da diese Flüsse nicht durch Transportbarrieren getrennt sind.

Schließlich wird die Nachricht über VMs an den HTTP-Requester zurückgesendet. Wir haben alle VMs als Request-Response konfiguriert.

Wir können diese Anwendung von jedem REST-Client aus aufrufen, indem wir JSON-Daten in den Body hochladen. Die URL lautetlocalhost:8081, wie im HTTP-Listener konfiguriert.

6. Erstellen von Projekten mit Maven in der Befehlszeile

In der Dateisettings.xmlim conf-Verzeichnis von Maven müssenpluginGroup enthalten sein:


    org.mule.tools

Wir müssen Maven auch mitteilen, wo sich Mule-Repositorys befinden, und dies muss im Profil-Tag enthalten sein:


    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
        
    

Jetzt können wir mit dem folgenden Befehl ganz einfach ein Maven-Projekt initiieren:

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

Nach der Konfiguration unseres Projekts können wir mit dem Befehlmvn packageein bereitstellbares Archiv erstellen. Wir können das Archiv jetzt im Ordnerappseines beliebigen eigenständigen Mule-Servers bereitstellen.

7. Fazit

In diesem Artikel haben wir verschiedene notwendige Konzepte zum Erstellen als ESB-Anwendung in Mule durchgearbeitet. Wir haben ein Beispielprojekt erstellt, das alle beschriebenen Konzepte veranschaulicht.

Wir können jetzt mit der Erstellung einer ESB-Anwendung mit Anypoint Studio beginnen, um unseren verschiedenen Anforderungen gerecht zu werden.

Wie üblich kann das gesamte Projekt inover on GitHub gefunden werden.