Integrationsmuster am Beispiel von Apache Camel @berlin.jar buschmais GbR Inhaber Torsten Busch, Frank Schwarz, Dirk Mahler und Tobias Israel Adresse Leipziger Str. 93 01127 Dresden info@buschmais.de http://www.buschmais.de Berlin, 14.09.2008 1
buschmais GbR Leipziger Straße 93 01127 Dresden Tel +49 (0) 351 320 923-0 Fax +49 (0) 351 320 923-29 Mobil +49 (0) 177 198 441 9 tobias.israel@buschmais.com Tobias Israel Senior Consultant IT 2
Das Grundproblem: Die Monolithen sterben aus! Eine Applika5on = Viele Applika5onen Interak5on Koopera5on Verfügbarkeit... 3
Gute alte Bekannte Austausch von Dateien über das Dateisystem Gemeinsame Datenbank EnDernter Methodenaufruf Messaging 4
Messaging-Infrastruktur Message Bus Messaging Bridge Channel Adapder Dead LeHer / Invalid Message Channel... 5
Fire and Forget Sender Empfänger 6
Fire and Forget Sender Empfänger 6
Store and Forward Sender Empfänger 7
Store and Forward Sender Empfänger 7
Store and Forward Sender Empfänger 7
Store and Forward Sender Empfänger 7
Store and Forward Sender Empfänger 7
Store and Forward Sender Empfänger 7
Store and Forward Sender Empfänger 7
Store and Forward Sender Empfänger 7
Store and Forward Sender Empfänger 7
Pro Messaging Keine technologischen Details bei der Implemen5erung PlaKorm und sprachübergreifende Integra5on leicht umzusetzen Asynchrone Kommunika5on Maximaler Durchsatz aller Systeme möglich Möglichkeit zur Steuerung von Überlastsitua5onen Relieability mithilfe von Store and Forward Offlinemodus der Applika5on realisierbar 8
Contra Messaging Komplexeres Programmiermodell Erschwertes Debugging Problem mit Abhängigkeiten zwischen einzelnen Nachrichten Massendatenverarbeitung/ transfer nicht performant Vendor lock in über spezielle Middlewarelösungen 9
Welche Aspekte sind also zu betrachten? Architekturmuster für Messaging Infrastruktur AuYau und Erzeugung von Nachrichten Steuerung des Nachrichtentransports Ggf. Konver5erung von Nachrichten in verschiedene Formate Endpunktverhalten/ strategien Überwachung und Steuerung 10
Enterprise Integration Pattern Musterkatalog für Integra5onsszenarien auf Basis asynchronen Datenaustauschs Gängige Probleme werden auf Meta Ebene betrachtet und eine (Lösungs )Struktur vorgegeben Defini5on einer grafischen Nota5on zur Beschreibung/ Dokumenta5on 11
Notation Grundelemente Nachrichtenkanal Nachricht Komponente 12
Beispiel: Routing Slip 13
Aufbau des Musterkatalogs App.1 App. 2 14
Aufbau des Musterkatalogs Messaging Endpoints Message Endpoint Message Gateway Durable Subscriber... App.1 App. 2 14
Aufbau des Musterkatalogs Messaging Endpoints Message Endpoint Message Gateway Durable Subscriber... App.1 Message Construction Message Command Message Correlation Identifier... App. 2 14
Aufbau des Musterkatalogs Messaging Endpoints Message Endpoint Message Gateway Durable Subscriber... Messageing Channels Publish Subscribe Channel Message Bus Guaranteed Delivery... App.1 Message Construction Message Command Message Correlation Identifier... App. 2 14
Aufbau des Musterkatalogs Messaging Endpoints Message Endpoint Message Gateway Durable Subscriber... Messageing Channels Publish Subscribe Channel Message Bus Guaranteed Delivery... Message Routing Message Command Message Correlation Identifier... App.1 Message Construction Message Command Message Correlation Identifier... App. 2 14
Aufbau des Musterkatalogs Messaging Endpoints Message Endpoint Message Gateway Durable Subscriber... Messageing Channels Publish Subscribe Channel Message Bus Guaranteed Delivery... Message Routing Message Command Message Correlation Identifier... App.1 Message Construction Message Command Message Correlation Identifier... App. 2 Message Transformation Message Translator Normalizer Content Filter... 14
Aufbau des Musterkatalogs Messaging Endpoints Message Endpoint Message Gateway Durable Subscriber... Messageing Channels Publish Subscribe Channel Message Bus Guaranteed Delivery... Message Routing Message Command Message Correlation Identifier... App.1 Message Construction Message Command Message Correlation Identifier... App. 2 Message Transformation Message Translator Normalizer Content Filter... System Management Control Bus Wire Tap Message Store... 14
Apache Camel Vorgefer5gte Implemen5erung für die meisten Muster des Enterprise Integra5on PaHern Kataloges Subprojekt von Apache Ac5veMQ Aktueller Versionsstand 1.4 Apache License 2.0 15
Apache Camel Camel Runtime Routerprocessor Filterprocessor Camel Processors JMS File FTP Mail Camel Components JMS- Provider Filesystem Browser Integration Context 16
Apache Camel Camel Runtime JMS File FTP Mail Routerprocessor Filterprocessor Camel Camel Processors Camel Components JMS- Provider Filesystem Browser Integration Context 16
Wie man mit Camel arbeitet Mitgelieferte Komponenten Konfigura5on (fast) ohne Coding Fluent API Spring Beans XML Camel Laufzeitumgebung Standalone Integra5on in Ac5veMQ Integra5on in ServiceMix Integra5on in OpenESB... 17
Mit Camel Arbeiten 2 Verfügbare Komponenten (ein Auszug) ac5vemq camel camel atom camel cxf camel core (File, Log,...) camel fp... Ausdrücke formulieren XPath XQuery Groovy BeanShell SQL... 18
Integration in the small Gewöhnliches Javacoding Camel Laufzeitumgebung starten Endpunkte direkt im Code ergänzen CamelContext camelcontext = new DefaultCamelContext(); ProducerTemplate template = camelcontext.createproducertemplate(); camelcontext.addcomponent("log", new LogComponent()); camelcontext.addcomponent("file", new FileComponent()); camelcontext.start(); template.sendbody("log:com.buschmais.part2.easy", "Log this message"); template.sendbodyandheader("file://target/subfolder", "Save this message", FileComponent.HEADER_FILE_NAME, "CamelIntegration.log"); 19
Consumer Endpoints Reagieren und Verarbeiten verschiedener Events Bindung an einen definierten Endpunkt Konfigura5on Endpoint endpoint = camelcontext.getendpoint("file://target/subfolder? consumer.initialdelay=8000"); Consumer fileconsumer = endpoint.createconsumer(new Processor() { public void process(exchange exchange) throws Exception { template.sendbody("log:com.buschmais.integration", "New File detected."); } }); fileconsumer.start(); 20
Integration in the large Strikte Separa5on von Nachrichtenverarbeitung und Nachrichtentransport Defini5on von Rou5ngs (+ ggf. Metadaten der Nachricht) Fluent API = Konfigura5on auf die gute alte Java Tour Integra5on mit Spring und entsprechender Erweiterung der XML Bean Defini5on 21
Beispielmuster: Content Based Router 22
Fluent API public void configure() throws Exception { from("file://tmp/stat.xml").choice(). when(xpathbuilder.xpath("/status/priority = SEVERE ")). to("smtp://support@buschmais.com:25?password=somepass"). when(xpathbuilder.xpath("/status/priority = NORMAL ")). to("smpt://info@buschmais.com:25?password=somepass"). otherwise().to("log:com.buschmais.integration.camel"); } 23
Spring XML Extensions <camelcontext id="camel" xmlns="http://activemq.apache.org/camel/schema/spring"> <route> <from uri="file://tmp/stat.xml" /> <choice> <when> <xpath>/status/priority = 'SEVERE'</xpath> <to uri="smtp://support@buschmais.com:25?password=somepass" /> </when> <when> <xpath>/status/priority = 'NORMAL'</xpath> <to uri="smpt://info@buschmais.com:25?password=somepass" /> </when> <otherwise> <to uri="log:com.buschmais.integration.camel" /> </otherwise> </choice> </route> </camelcontext> 24
Testing MockComponent & MockEndpoint CamelContext camelcontext = new DefaultCamelContext(); MockEndpoint mockep = camelcontext.getendpoint("mock:checka", MockEndpoint.class); mockep.expectedbodiesreceived("messageid", "MessageRefId", "Priority"); mockep.expectedminimummessagecount(2); mockep.assertisnotsatisfied(); Unterstützung von JUnit Tests mit viel Basisfunk5onalität in Klasse ContextTestSupport 25
Tooling Maven Plugin Ausführen der Laufzeitumgebung Erstellen von Dokumenta5on entsprechend EIP PaHern <groupid>org.apache.camel</groupid> <artifactid>camel-maven-plugin</artifactid> 26
Beispielapplikation Webservice Translator Message Store 27
Zum Schluss wäre noch folgendes zu sagen Messaging ist ein alter (aber guter) Hut Im Projektalltag leider of: unstrukturiertes Vorgehen Integra5on auf Mikroebene viel handgestrickter Code wenig Kontrolle über Integra5onsumgebung Enterprise Integra5on PaHer können in vielen Fällen den Rahmen für erfolgreiche(re) Integra5onsprojekte geben AusdrucksmiHel für Integra5onsaufplanung LeiDaden für Realisierung Apache Camel als gute Vorlage ohne viel Handgestricktes nach den Integra5onsmustern zu arbeiten 28
Vielen Dank. 29
Referenzen Enterprise Integra5on PaHern: Gregor Hohpe, Bobby Woolf; Addison Wesley, 2004 Enterprise Integra5on PaHern Website: hhp:// www.eaipaherns.com/ Apache Camel Website: hhp://ac5vemq.apache.org/camel 30