JBoss Fuse - Open Source Integration Vergleich Teil 5
Red Hat hat mit der Aquise von FuseSource die Integrationslösung Fuse übernommen. Fuse basiert wie der Talend ESB auf den Apache Projekten ServiceMix und Camel. Die Runtime bietet gegenüber dem ServiceMix Erweiterungen für die Verwaltung großer Installationen. Für das JBoss Developer Studio gibt es eine Erweiterung, mit der Fuse Anwendungen entwickelt werden können.
1. Installation
Entwicklungsumgebung und Runtime werden beim JBoss Produkt separat installiert. Damit die Installation reibungslos funktioniert muss die Version des Developer Studios zur Fuse Runtime Version passen. Nicht alle Versionen des Studios unterstützen die JBoss Developer Integration Stack Erweiterungen, die in das auf Eclipse basierende Developer Studio installiert werden. Damit eine Installation der Erweiterungen möglich ist, muss zuerst ein neues Maven Repository eingepflegt werden. Bis zu einer laufenden Installation können schnell Stunden verstreichen. Bei Mule und Talend wird nur ein Download benötigt und die Installation ist in Minuten erledigt. Dass es für JBoss FUSE keine separate Entwicklungsumgebung gibt hat auch Vorteile: Man kann in der gleichen IDE für den Application Server, Fuse oder andere Projekte entwickeln.
Abbildung 1 zeigt die Fuse Konsole in einem Fenster des JBoss Developer Studios. Die Fuse Runtime basiert wie der Talend ESB auf der Apache OSGi Runtime Karaf. Das Apache Projekt wurde von JBoss um das fabric Konzept erweitert, welches das Deployment und die Verwaltung von Anwendungen auf der OSGi Plattform bei großen Installationen erleicht.
Abbildung 1:
2. Entwicklung
Die Entwicklung von Integrationsprojekten für die Fuse Plattform im Developer Studio ist im Wesentlichen mit der Entwicklung von Anwendungen für den ServiceMix identisch. Darüber hinaus können Camel Routen nicht nur mit Java, sondern auch mit einem graphischen Editor entwickelt werden. Aus den graphisch erstellten Routen generiert der Editor Routen in der XML Sprache. Der Editor unterstützt Roundtrip Engineering. Änderungen können im graphischen Editor oder im XML Code durchgeführt werden. Nach einem Wechsel in die jeweils andere Ansicht sind die Änderungen dann auch dort sichtbar.
Die Visualisierung der Routen orientiert sich stark an die Vorlage aus dem Enterprise Integration Patterns Buch.
Abbildung 2:
3. Adaptoren
Da Fuse für die Integration Camel einsetzt, sind auch alle Adapter und Enterprise Integration Patterns von Camel verfügbar. Im graphischen Editor steht jedoch nur eine kleine Teilmenge der Konnektoren zur Verfügung. Wer mit den Dutzend Adaptern in der Palette des Editors nicht auskommt, muss auf die Entwicklung mit Code ausweichen.
4. Mapping
Seit der Fuse Version 6.2. gibt es einen graphischen Mapper, mit dem Transformationen von einem Quellformat in ein Zielformat erstellt werden können. Die Abbildung unten zeigt ein Mapping einer Person im XML Format zu einem Kontakt im JSON Format.
Abbildung 3:
Neben einfachen Mappings können auch komplexe Ausdrücke verwendet werden, die den Inhalt eines Feldes z.B. aus mehreren Eingaben berechnen. Ausdrücke können in allen von Camel unterstützten Skriptsprachen wie Simple, Groovy und Python erstellt werden. Über eingebundene Java Klassen können selbst komplexeste Berechnungen durchgeführt werden.
Der graphische Mapper erstellt eine XML Datei für das Bean Mapping Werkzeug Dozer
5. Monitoring
Die Fuse Runtime startet eine auf dem hawt.io Projekt basierende Konsole, mit der Routen, Queues und OSGi Bundles überwacht werden können. Mit der Konsole können auch Container und Profile der fabric Erweiterung verwaltet werden.
Über das Dashboard in Abbildung 4 bekommt der Administrator einen Überblick zur Last und zum Resourcenverbrauch.
Abbildung 4:
6. Fuse Fabric
Die Verwaltung vieler ServiceMix Instanzen ist nicht trivial. Fuse Fabric erweitert die Konzepte im ServiceMix für den Betrieb einer großen Anzahl von ServiceMix Instanzen und Anwendungen.
Abbildung 5:
JBoss Fuse entspricht nach der Installation weitestgehend dem Apache ServiceMix und kann auch so eingesetzt werden. Um die Clustering Fähigkeiten von Fuse Fabric zu nutzen, kann Fuse in einen Fabric Server umgewandelt werden. Nach dem Erzeugen einer fabric ist JBoss Fuse von einem gewöhnlichen ServiceMix in einen Fabric Server transformiert. Nach dem Ausführen des:
fabric:create
Kommandos werden die Standard Bundles durch fabric Profile ersetzt.
Ein Fabric Server kann um weitere Serverinstanzen ergänzt werden, die entweder in der selben Java VM, auf einem entfernten Rechner oder in der Cloud laufen. Zusammen bilden die Instanzen ein Fabric.
Über ein Fabric kann die Konfiguration und die installierten Anwendung mehrerer Fuse Instanzen gesteuert werden. Der Abgleich in einem Fabric erfolgt über eine oder mehrere Fabric Registries. Die Fabric Registries bilden einen verteilten Konfigurationsbaum und basieren auf dem Apache Zookeeper Projekt.
Abbildung 6:
In den Registries werden Profile abgelegt, welche die Konfiguration und die beteiligten Bundles einer Anwendung beschreiben.
Abbildung 7:
Ein Profile kann alles enthalten, was für den Betrieb einer Anwendung notwendig ist:
- Adressen von Feature- und Maven-Repositories
- Listen von Bundles, Features und Web Anwendungen
- Blueprint und Spring XML Dateien
- Ressourcen wie JSON, YAML und sonstige Dateien
- Properties
Abbildung 8 zeigt das Profile feature-camel in der hawt.io Konsole. Die Profile können über die Web Konsole oder über die OSGi Shell verwaltet werden.
Abbildung 8:
Profile können von Fabric Agenten auf Instanzen installiert werden. Ein Agent verbindet einen Container mit einer Registry. Durch Vererbung lassen sich die Profile strukturieren. Die Änderungen der Profile lassen sich versionieren, so dass die Umgebung für eine Anwendung schnell wieder auf einen vorigen Zustand zurückgesetzt werden kann.
Die Endpunkte der Anwendungen: Web Services Adressen, REST Ressourcen oder Queue-Namen können ebenfalls in der Registry abgelegt und abgefragt werden. Durch die Entkoppelung über die Registry kann sich die physikalische Adresse von Endpunkten ändern, ohne dass die Clients angepasst werden müssen.
7. Fazit
JBoss Fuse ist interessant, wenn man die zusätzlichen Funktionen der fabric Erweiterungen einsetzen möchte. Für eine kleine Anzahl an Integrationsrouten ist das Fabric Konzept zu mächtig und komplex. Wer mehrere Dutzend oder hunderte von Routen einsetzt, eine hohe Verfügbarkeit benötigt und die Routen unabhängig verwalten möchte, für den ist JBoss Fuse mit der Fabric Erweiterung geeignet.