Praxisbericht: Digitale Transformation mit JBoss Fuse

Werbung
PRAXISBERICHT:
DIGITALE TRANSFORMATION
MIT JBOSS FUSE & 3SCALE
DIETER WIJNGAARDS
CTO | ADESSO SCHWEIZ AG
DOMINIK WOTRUBA
ASSOCIATE MANAGER SOLUTION ARCHITECTURE | RED HAT
SEPTEMBER 13, 2016 | KONGRESSHAUS ZURICH
DIE REFERENTEN…
Dominik Wotruba
Dieter Wijngaards
Red Hat
adesso Schweiz AG
ASSOCIATE MANAGER SOLUTION ARCHITECTURE
CTO
“DIGITAL TRANSFORMATION”
SOUNDS GREAT, BUT...
TODAY'S I.T. REALITY: SILOS OF INFORMATION
TWO MAJOR INTEGRATION TYPES
TWO MAJOR INTEGRATION TYPES
INTEGRATION ARCHITECTURE REQUIREMENTS
ENTERPRISE APPLICATION
INTEGRATION MIT JBOSS FUSE
UND APACHE CAMEL
ENTERPRISE INTEGRATION PATTERNS
EINIGE ENTERPRISE INTEGRATION PATTERNS…
Messaging Endpoints
Message Construction
Message Routing
System Management
Message Transformation
Messaging Channels
Ein Beispiel…
WIE KANN ICH HOSTDATEIEN VERARBEITEN?
GRAFISCH DARGESTELLT…
EDI
MIT ENTERPRISE INTEGRATION PATTERNS…
MIT ENTERPRISE INTEGRATION PATTERNS…
Aufgabe
▶Filesystem überwachen (Events)
▶FTP und/oder FILE
Herausforderungen
▶Wann können Dateien verarbeitet werden?
▶Wie können Dateien gefiltert werden?
▶Reihenfolge?
▶Was passiert mit Dateien, die gelesen wurden?
Mögliche Implementierungen
▶Java 7 NIO
MIT ENTERPRISE INTEGRATION PATTERNS…
Aufgabe
▶Splitten (Parsen) von „Fixed Length“-Dateien
Herausforderungen
▶Wie wird das Format erkannt?
▶Wie werden die nächsten Schritte parallelisiert?
▶Streaming?
▶Encoding?
Mögliche Implementierungen
▶Java Tokenizer
▶Java 8 Stream API
MIT ENTERPRISE INTEGRATION PATTERNS…
Aufgabe
▶Umwandeln von Fixed-Length-Daten nach Java Beans
Herausforderungen
▶Wie wird das Format der Daten erkannt?
▶Was passiert mit Fehlern?
▶Abhängigkeiten?
▶Encoding?
Mögliche Implementierungen
▶BeanIO
▶Smooks
▶Flatpack
▶...
MIT ENTERPRISE INTEGRATION PATTERNS…
Aufgabe
▶Herausfiltern von nicht benötigten Objekten
Herausforderungen
▶Wie werden die Objekte erkannt?
▶Konfigurierbarkeit?
Mögliche Implementierungen
▶Java 8 Stream API
MIT ENTERPRISE INTEGRATION PATTERNS…
Aufgabe
▶Routing von Objekten zur weiteren parallelen Verarbeitung
Herausforderungen
▶Wie kann die Verarbeitung parallelisiert werden?
▶Wie wird das Routing konfiguriert?
▶Wie kann MOM integriert werden?
Mögliche Implementierungen
▶Java 8 Stream API
▶Eigene Queues auf Java-Basis
▶JMS: ActiveMQ, RabbitMQ, HornetQ, QPid, OpenJMS
MIT ENTERPRISE INTEGRATION PATTERNS…
Aufgabe
▶Die Verarbeitung (das Schreiben von Daten in die
Datenbank) auf „Workers“ verteilen (Multithreading)
Herausforderungen
▶Wie werden die einzelnen Threads verwaltet?
▶Wie skalieren die Ressourcen?
Mögliche Implementierungen
▶Java 8 Stream API: Parallel Streams -> Stabilität?
▶Java Concurrency (Threads und Executors)
MIT ENTERPRISE INTEGRATION PATTERNS…
Aufgabe
▶Das Schreiben von den Daten in die Datenbank
Herausforderungen
▶Wie werden XA-Transaktionen implementiert?
▶Was passiert bei Fehlern? Rollbacks?
Mögliche Implementierung
▶Spring mit JPA
▶JEE-Umgebung mit JPA
MIT ENTERPRISE INTEGRATION PATTERNS…
MIT ENTERPRISE INTEGRATION PATTERNS…
MIT ENTERPRISE INTEGRATION PATTERNS…
Weitere Herausforderungen
▶Wie können Fehler behandelt werden?
▶Wie kann das System überwacht werden?
▶Wie können wir Loggen? Throughput-Logging?
▶Können wir das Lifecycle-Management beeinflussen (geordnetes Shutdown)?
▶Ist das Debuggen auf Integrationsebene möglich?
▶Können wir einfach Unit- und Integrationstests definieren?
Mögliche Implementierung
▶Eigenimplementierung auf der Basis von Standard JAVA-Funktionalität und
Bibliotheken, z.B. JMX, JUnit
WAS SCHÖN WÄRE… EIP ALS PSEUDOCODE
from(file)
.split(„/n“)
.unmarshall(beanIO)
.filter(recordType==BDN || recordType==NDA)
.choice()
.when(recordType==BDN).to(queue1)
.otherwise().to(queue2)
from(queue1)
.transactional()
.to(jpa:save)
from(queue2)
.transactional()
.to(jpa:save)
Ein mächtiges Integrations-Framework,
basierend auf Enterprise Integration
Patterns
APACHE CAMEL – ARCHITEKTUR-ÜBERBLICK
Camel Context ist die Runtime Registry und enthält alle
Endpoints, Routen, Processors. Definiert einen Lifecycle.
Processors implementieren die 50+ Enterprise
Integration Patterns und die Datentransformationen.
XML DSL (Spring, Blueprint)
<route>
<from uri="timer:test">
<to uri="log:test">
</route>
Java DSL
from("timer:test")
.to("log:test");
Scala DSL
"timer:test" -> "log:test"
"timer:test" to "log:test"
Groovy DSL
Annotation DSL
Endpoints werden über URI definiert und über URIParameter konfiguriert.
log:example?level=DEBUG
Quelle: Camel in Action
APACHE CAMEL - ENDPOINTS
►Der Endpunkt eines Nachrichten-Kanals
> Versenden (produce) oder Empfangen (consume) von Nachrichten
►Durch sogenannte Components bereitgestellt
> Camel Core Components, z.B. direct:, seda:, vm:, timer:, log:
> Optionale Components, z.B. camel-gae → ghttp:, gtask:, gmail:
►Definition über URIs, Konfiguration über URI-Parameter
> Scheme identifiziert die Component
> Context path definiert die komponenten-spezifische «Resource»
> Options zur weiteren Konfiguration
Quelle: Camel in Action
APACHE CAMEL - COMPONENTS
APACHE CAMEL - MESSAGE ROUTER
►Problem:
> Wie können die verschiedenen Prozessschritte entkoppelt werden, so dass Messages abhängig
von Konditionen an weitere Prozesschritte (Filters) weitergegeben werden können?
– Pipes und Filters routen alle Messages an die gleichen Prozessschritte weiter.
►Lösung:
> Filter werden mit Prädikaten versehen, um die richtige Ziele zu selektieren
►In Camel:
> choice-Nodes
outQueue 1
inQueue
outQueue 2
CAMEL - MESSAGE ROUTER MIT EXPRESSIONS
outQueue 1
inQueue
outQueue 2
APACHE CAMEL - MESSAGE ROUTER MIT XPATH
outQueue 1
inQueue
outQueue 2
INTEGRATION MIT JBOSS FUSE – EIN BEISPIEL
Integration Layer
Service Layer
Persistence Layer
FILE Service
Module bzw.Bundles
crm-camel
Import von
xml & txt
REST Service
crm-rs
crm-service
SOAP Service
crm-ws
JBoss Fuse Runtime Environment
crmpersistence
jdbc
crm
JBOSS FUSE – FABRIC PROVISIONING MIT PROFILES
Integration Layer
profile
Service Layer
Persistence Layer
adesso-crm-import
FILE Service
crm-camel
Import von
xml & txt
profile
profile
adesso-crm-rest
adesso-crm-service
REST Service
crm-rs
profile
crm-service
crmpersistence
Beschreibung aus weiteren Profiles, Features, Module,
Konfigurationen und Ressourcen
adesso-crm-soap
SOAP Service
crm-ws
JBoss Fuse Runtime Environment
jdbc
crm
JBOSS FUSE – FABRIC PROVISIONIERUNG
rest
soap
Port 9000
Port 9000
Automatic service discovery & load balancing
Fabric Managed Container
gateway
gateway-http
file
rest
soap
Port 8181
Port 8181
rest
soap
Port 8182
Port 8182
rest
soap
Port 8183
Port 8183
rest
soap
Port 8184
Port 8184
Fabric Managed Container
Fabric Managed Container
Fabric Managed Container
Fabric Managed Container
Fabric Managed Container
crm-import-node
crm-import-node1
crm-import-node2
crm-import-node3
crm-import-node4
adesso-crm-import
adesso-crm-rest
adesso-crm-rest
adesso-crm-rest
adesso-crm-rest
adesso-crm-soap
adesso-crm-soap
adesso-crm-soap
adesso-crm-soap
API-MANAGEMENT MIT 3SCALE
DIE HERAUSFORDERUNG…
Wie kann ich meine Services extern und intern (vielleicht auch
kostenpflichtig) zur Verfügung stellen?
API Management mit
3Scale
3scale
The Plug & Play SaaS API Management Platform and Infrastructure
3scale stellt eine komplette Out-of-the-Box SaaS API-Management-Lösung bereit und
ermöglicht API Providers ihre APIs kontrolliert an Kunden zur Verfügung zu stellen
Die 5 Key-Module der 3scale's API-Management-Lösung:
Access Control & Security – Key-Generierung und Authentifizierung
Analytics & Reporting – für den API-Provider und die API-Consumers
Developer/Partner Portal – Mit dem frei konfigurierbaren 3scale CMS
API Business Engine – Erstellen von Service-Kontrakten zur Einschränkung der Funktionalität
auf Methodenebene inklusive Pricing und Limitierungen der Schnittstellenverwendung
Billing & Payments – Erstellen von Rechnungen auf der Basis von Businessregeln
DAS ENTWICKLERPORTAL
DIE API DOKUMENTATION FÜR ENTWICKLER
DAS ADMINISTRATIONSPORTAL – APPLICATIONS
ARCHITEKTUR MIT 3SCALE – NGINX SELF-MANAGED
REMOTE APPs
rest
ON PREMISE
LOCAL APPs
rest
https über 3scale
Konfiguration (manuell)
rest
Port 9000
3scale Gateway Integration
APIcast (NGINX)
NGINX self-managed
Amazon API Gateway
Heroku
Amazon Machine Image
Red Hat OpenShift
Plugin Integration
API Integration
Fabric Managed Container
gateway
gateway-http
JBoss Fuse Fabric Managed Application Cluster
ARCHITEKTUR MIT 3SCALE – CLOUD GATEWAY
REMOTE APPs
rest
https über
3scale Konfiguration
rest
3scale Gateway Integration
APIcast (NGINX)
NGINX self-managed
Amazon API Gateway
Heroku
Amazon Machine Image
Red Hat OpenShift
Plugin Integration
API Integration
Fabric Managed Container
gateway
gateway-http
JBoss Fuse Fabric Managed Application Cluster
ON PREMISE
ARCHITEKTUR MIT 3SCALE – API INTEGRATION
REMOTE APPs
rest
ON PREMISE
Fabric Managed Container
gateway
LOCAL APPs
rest
threescale-gateway
JBoss Fuse Fabric Managed Application Cluster
3scale Gateway Integration
APIcast (NGINX)
NGINX self-managed
Amazon API Gateway
Heroku
Amazon Machine Image
Red Hat OpenShift
Plugin Integration
API Integration
Rest (https)
über 3Scale API
3SCALE API
DEMO
Herunterladen