Mule ESB / Anypoint - Open Source Integration Vergleich Teil 6

Mule ist ein Open Source Projekt das über die github Plattform entwickelt wird. Im Gegensatz zum JBoss und Talend ESB basiert Mule nicht auf Apache Camel und ServiceMix. Mule ist eine eigene Entwicklung, die es bereits vor dem Buzzword Enterprise Service Bus gab. Auf der Basis von Mule sind in der Industrie zahlreiche Installationen seit Jahren im Einsatz. Seit neustem gibt es neben der Möglichkeit Mule onpremise auf eigenen Rechnern auszuführen auch die Möglichkeit Mule in der Cloud zu betreiben. Mulesoft ist ein Innovator der die Community mit Entwicklungen wie zum Beispiel RAML, einer Beschreibungssprache für REST Ressourcen, bereichert.

Mule ist im Gegensatz zu Camel ein komplettes ESB Produkt mit Designer, Runtime und vielen anderen Funktionen. Wer möchte kann Mule aber auch wie Camel leichtgewichtig als reine Bibliothek einsetzen und Mule Flows vom eigenen Java Code aus starten.

Mule ist eine umfassende Lösung, die neben der reinen Integration auch Betrieb, Monitoring und Sicherheit abdeckt.

1. Anypoint Studio

Das Anypoint Studio ist eine graphische Entwicklungsumgebung für Integrations Flows auf der Basis der Eclipse IDE. Das Studio kann als 670 Mbyte große Datei heruntergeladen werden. Mit dem Studio wird eine Runtime ausgeliefert, in der per Knopfdruck Flows ausgeführt werden können. Die Installation vom Anypoint Studio ist einfach und in wenigen Minuten durchgeführt. Beispiel Projekte erleichtern die Einarbeitung.


Abbildung 1: Anypoint Studio auf der Basis von Eclipse

2. Entwicklung

Die graphische Entwicklung von Integrationslösungen geht meiner Erfahrung nach mit dem Mule ESB von allen in dieser Reihe betrachteten Werkzeugen am besten. Der folgende Screenshot zeigt ein Flow, der graphisch mit Konnektoren und EIP Mustern der Palette zusammengesetzt wurde.


Abbildung 2: Graphisch erstellter Flow

Durch einen Klick auf das Configuration XML Tab kann der Entwickler vom graphischen Editor in den Code Editor wechseln. Änderungen im Diagramm und im Code sind sofort in der jeweils anderen Ansicht sichtbar.

Als Code Format verwendet Mule XML. Das folgende Listing zeigt einen Ausschnitt aus dem Code des Flows von Abbildung 2.

<flow name="sample-orderFlow">
  <file:inbound-endpoint path=“order/in" responseTimeout="10000" doc:name="File"
        connector-ref="File"/>

  <dw:transform-message metadata:id="9471cd72-d018-4de8-901f-43ee7b3a3fc8"
                       doc:name="Transform Message">
    <dw:set-payload>%dw 1.0
%output application/json
---
{
	item: {
		product: payload.name,
		price: payload.price
	}
}</dw:set-payload>
  </dw:transform-message>
  <echo-component doc:name="Echo"/>
  <file:outbound-endpoint path=“order/out" connector-ref="File" responseTimeout="10000"
        doc:name="File"/>
</flow>

Der XML Editor bietet bei der Entwicklung Code Vervollständigung und Hilfetexte.


Abbildung 3: Mule XML Editor mit Code Vervollständigung

Wie beim JBoss Fuse und Talend ESB werden die graphisch zusammengestellten Komponenten in einem Dialog mit Details ergänzt. Der folgende Screenshot zeigt den Dialog für die Jetty-Komponente mit der ein entfernter Web Server aufgerufen werden kann. Im Dialog werden Pfad, HTTP Methode und Parameter angegeben.


Abbildung 4: Dialog für die Konfiguration der Jetty-Komponente

Der Wert für den Parameter „q“ wird über einen XPath Ausdruck ermittelt. Neben XPath steht auch die Mule Expression Language zur Verfügung.

3. Transformation und Mapping

Mule bietet ebenso wie Apache Camel eine Fülle von Transformern für die Umwandlung von Daten. Mit Skript Transformern können Daten mit Groovy, Javascript, Python oder Ruby aufbereitet werden. Java Object Transformer können beispielsweise ein XML Dokument in ein Java Bean umwandeln.

3.1. DataWeave

Seit der Version 3.7 ersetzt DataWeave den alten DataMapper. DataWeave basiert auf einer einfachen Mapping-Sprache, die JSON ähnelt. Unterstützt werden u.a. die Formate Text, CVS, JSON und XML sowie Java Objekte. DataWeave Skripte können im Code oder mit dem graphisch Mapper erstellt werden.

3.2. Der Mapper

Bevor mit der Zuordnung begonnen werden kann, wird der Mapper mit dem Quell- und Zielformat konfiguriert. Zur Spezifikation der Formate können verwendet werden:

  • JSON oder XML Schemas
  • JSON oder XML Beispiel Dokomente
  • Java Klassen
  • CSV Feldlisten
  • Map Eintäge

Der Mapper unterstützt die graphische Zuordnung sowie das Arbeiten im Code.

Abbildung 5 zeigt die Ansicht für die graphische Zuordnung von Strukturen des Eingabeformates auf die Struktur des Ausgabeformates.


Abbildung 5: Zuordnung von Feldern im graphischen Mapper

Der Code kann im Mapper direkt editiert werden. Wird ein Beispiel für die Eingabe hinterlegt, so wird während des Editierens live das Ergebnis der Transformation auf die Beispieldaten angezeigt. Im Screenshot unten ist der Mapping Code links und die live Aktualisierung rechts zu sehen.


Abbildung 6: Code Editor für das Mapping mit live Aktualisierung einer Beispiel Transformation

Es macht richtig Spaß mit der DataWeave Sprache Transformationen zu entwickeln. Den graphischen Editor verwende ich um ein einfaches Mapping als Ausgangsbasis zu erzeugen. Danach arbeite ich die Transformation im Code Editor aus. Die DataWeave Sprache enthält Konstrukte der funktionalen Programmierung, mit denen komplexe Transformation einfach zu realisieren sind. Im Beispiel oben wird eine map-Funktion verwendet, um die Elemente einer Liste zu transformieren. Die Preise der einzelnen Positionen werden mit einer reduce-Funktion zu einem Wert aufsummiert.

DataWeave hat eine mächtige Syntax, die Mappings mit Aggregation, Filtern und Gruppieren ermöglicht. Beim Editieren hilft die Code Vervollständigung, welche auch den Aufbau der Datenformate kennt.


Abbildung 7: Autovervollständigung im DataWeave Editor

3.6. DataSense

Metadaten über die Nutzlast und die Header-Felder kann DataSense von den Datenquellen abrufen. Die Informationen über Datentypen und den Aufbau von Nachrichten stehen dann im graphischen Editor und im Mapper zur Verfügung. Die intelligenten Vorschläge auf Basis der Metadaten z.B. für die Vervollständigung von Kommandos sparen Zeit bei der Entwicklung.


Abbildung 8: Metadaten über die DataSense Funktionalität

4. Konnektoren

In Abbildung 9 ist die Palette mit den im Anypoint Studio enthaltenen Konnektoren zu sehen.


Abbildung 9: Im Studio enthaltene Konnektoren

Zusätzliche Konnektoren, Templates und API Beschreibungen stehen auf der Anypoint Exchange Plattform im Web zur Verfügung. Die Konnektoren werden in die Kategorien Community, MuleSoft Certified, Select und Premium eingeteilt. In der Community-Kategorie gibt es frei verfügbare Konnektoren unter Open Source Lizenzen. Die Premium-Konnektoren sind nur in Verbindung mit einer kostenpflichtigen Enterprise Subscription erhältlich.


Abbildung 10: Zusätzliche Konnektoren gibt es in der Anypoint Exchange Plattform

6. Runtime

Zum Testen können Mule Anwendungen im Studio ausgeführt werden. Für den Betrieb gibt es die Mule Runtime als Standalone Server und zum Einbetten als JAR Datei. Mit der JAR-Datei kann eine Mule Runtime beispielsweise in eine Web- oder Spring-Anwendung integriert werden.

7. Monitoring und Management

Mule Runtime Instanzen können mit der Mule Enterprise Management Console überwacht werden. Die Konsole ist als kommerzielles Produkt verfügbar und wird daher in diesem Artikel nicht weiter betrachtet.

Alternativ können Mule Laufzeitumgebungen über die Java Management Extensions überwacht werden. Beispielsweise mit der JMX Konsole jconsole oder hawt .io.

8. Dokumentation

Die Online Dokumentation ist gut strukturiert, ausführlich und enthält viele Beispiele.

9. Fazit

Der Mule ESB mit Anypoint Studio und Runtime ist in sich rund und macht insgesamt einen stimmigen Eindruck.

Wer bei der Integration nicht programmieren möchte, kommt mit dem Mule von allen hier betrachteten Produkten am weitesten. Flows lassen sich komfortabel graphisch editieren. Die Dialoge der Komponenten sind übersichtlich aufgebaut und enthalten Assistenten, die bei der Eingabe unterstützen. Der Mapper ist leistungsfähig und die DataSense Funktionalität unterstützt bei der Eingabe. Ganz ohne Java Kenntnisse geht es aber nicht. Bei Fehlern muss der Entwickler in der Lage sein einen Java Stacktrace zu lesen oder fehlende Abhängigkeiten zu ergänzen.

Mule ist Open Source und gleichzeitig ein kommerzielles Produkt. Nicht alles ist mit der kostenlosen Version möglich. Beispielsweise sind einige Adapter nur mit einer Subscription erhältlich. Es ist mühselig zu recherchieren, was beim Mule den Erwerb einer Lizenz oder einer Subscription erfordert. Wer Mule in kritischen Anwendungen einsetzt und Wert auf den Support vom Hersteller legt sollte sich den Abschluss einer Subscription überlegen.