Spring IntégrationRelever les défis de l’intégration d’entreprise
● Les Défis de l’intégration d’entreprise.
● Les Entreprise Integration Patterns (EIP).
● Le Framework Spring Intégration.
Le Plan
Spring IntégrationRelever les défis de l’intégration d’entreprise
Stéphane Goumard
● Expertise environnement Java.○ Architecte technique○ Consultant○ Formateur.
● Une application isolée n’existe pas.
● SI complexe, sous systèmes hétérogènes, disparates.
● Apparition de nouvelles techno ou évolutions “IC” <=> “DevOps”
● Défaillance de l’infrastructure (Scalable,Interopérabilité, “Fail Over”)
.Net
Java
BigData
WS
Les Défis de l’intégration d’entreprise
Spring IntégrationRelever les défis de l’intégration d’entreprise.
● Simplifier les échanges entre applications tout en tenant compte des différentes contraintes inhérentes à un SI hétérogène.
● Pour résoudre cette problématique d'intégration d'environnement, il est nécessaire de mettre en place de la glu logicielle entre ses systèmes et ses applications.
● Les Entreprise Integration Patterns (EIP) sont des patterns pour résoudre l'intégration de systèmes hétérogènes et Spring Intégration en est un frameworks.
Les Défis de l’intégration d’entreprise
Spring IntégrationRelever les défis de l’intégration d’entreprise
Application A
● File Transfert
Les différents Style D’intégration.
Spring IntégrationRelever les défis de l’intégration d’entreprise
Export
Import
Application B
Avantages:- Simple à mettre en oeuvre- Découplage (technique, temporel, physique)- Toujours utilisé HDFS / Hadoop
Inconvénients :- Accès concourant.- Pas de transactions- Sécurité.- Intéropérabilité - Peu fiable.
File
● Shared Database
Les différents styles d’intégration
Spring IntégrationRelever les défis de l’intégration d’entreprise
Avantages:- Transaction simple- Centralisation- Sécurité- Scalable, fail over.
Inconvénients :- Application lié au schéma.
- Schéma unifié / figé- Évolution difficile
=> Évolution NoSql Schéma Less.
Application A
Application B
Application C
DBC
DBC
DBC
● RPC (Approche orientée Services SOA)
Les différents styles d’intégration
Spring IntégrationRelever les défis de l’intégration d’entreprise
Avantages:- Simple mise en oeuvre programme- Découplage technique- Réutilisation du fonctionnel- Maintenance
Inconvénients :- Couplage temporel (Fail Over)- Pas Scalable- Interopérabilité.- Point to Point
Application A Application BInerface RPCRequest
Reply
● Point à Point
Les différents styles d’intégration
Spring IntégrationRelever les défis de l’intégration d’entreprise
SOA Editque
Datawarehouse
CRM
Batchs Processing
HBase / HDFS
WS Préstataires
● Le Style “Asynchronous Messaging”
Les différents styles d’intégration
Spring IntégrationRelever les défis de l’intégration d’entreprise
Application A(Producteur)
Adapter Messages
Adapter
Application B( Consommateur )
Messages
Channel
Broker Messaging
● Le Style “Asynchronous Messaging”
Les différents styles d’intégration
Spring IntégrationRelever les défis de l’intégration d’entreprise
● Découplage Temporel, Communication asynchroneNotion de tampon “Buffer”, Fire and Forget.
● Logique d’intercepteur (Routing, Filtre, Transformation), Découplage physique.
● Scalable, Fiable : ○ Routing permettre de router le message sur des
conditions.○ Pipeline, Cadencé (Montée en charge), Claim check
patern.○ Broadcasting : permettre la diffusion d’un message à
plusieurs, traitement en parallèle.○ Fail Over via des mécanismes de persistance.
Spring IntégrationRelever les défis de l’intégration d’entreprise
WS PréstatairesHBase / HDFS Batchs Processing
SOA EditqueDatawarehouse CRM
Les différents styles d’intégration● Le Style “Asynchronous Messaging”
● Le Style “Asynchronous Messaging”
Les différents styles d’intégration
Spring IntégrationRelever les défis de l’intégration d’entreprise
● Pas de contexte transactionnel entre production et consommation
● Propagation du contexte de sécurité difficile
● Gestion des erreurs complexes
● Messaging - le besoin de conceptualiser
Les différents styles d’intégration
Spring IntégrationRelever les défis de l’intégration d’entreprise
● Les Messages : les données sont encodées dans un message avec un header et un body.
● Les Channel : il établit la liaison entre deux applications, c’est un chemin virtuel par lequel est transmis et reçu les messages.
● End Point : c’est le point d’entrée et sortie du système de messaging.
● Transformer : traitement spécifique destiné à adapter un message au traitement suivant.
● Pipe, Filter, Router : enchaînement de traitements destinés à orchestrer le traitement d’un message.
● Introduit un langage sémantique, un ensemble de patterns et d’idéogrammes permettant de conceptualiser, architecturer un SI sur le style du messaging.
Entreprise Intégration Patterns (EIP)
Spring IntégrationRelever les défis de l’intégration d’entreprise
● Bible, catalogue de références sur les EIP
● Ecrit en Octobre 2003 par Gregor Hohpe et Bobby WoolF et toujours d’actualité
● C’est devenu un standard pour tous les frameworks qui ont implémenté les EIP comme Spring Intégration ou Apache Camel.
Entreprise Intégration Patterns (EIP)
Spring IntégrationRelever les défis de l’intégration d’entreprise
Entreprise Intégration Patterns (EIP)
Spring IntégrationRelever les défis de l’intégration d’entreprise
● Modéliser les EIP à l’aide de composants techniques pour permettre une implémentation d’intégration sur le style du messaging.
Frameworks EIP
Spring IntégrationRelever les défis de l’intégration d’entreprise
Spring Intégration
Apache Camel
● Fournir un modèle simple pour implémenter des solutions complexes d’EAI
● Une plateforme de Messaging basée sur les principes d’EDA (Event Driven Architecture)
● Fournir une liste des composants sur étagère pour permettre la mise en oeuvre des Patterns EIP
● Faciliter la mise en oeuvre d’un modèle d'échanges asynchrones orientés message dans un environnement basé sur Spring.
Spring Intégration (Mark Fisher)
Spring IntégrationRelever les défis de l’intégration d’entreprise
● Couplage lâche entre composants pour faciliter la modularité et la testabilité
● Respect de la séparation des préoccupations (separation of concerns) entre la logique métier et la logique d’intégration.
● Points d’extension abstraits mais clairement définis afin de promouvoir la réutilisation et la portabilité.
Eco-Système Spring.
Spring IntégrationRelever les défis de l’intégration d’entreprise
Pipes-and-Filters● Le système de messaging proposé par Spring Intégration
suit le modèle pipes-and Filters.
Spring IntégrationRelever les défis de l’intégration d’entreprise
● Conception différente que par l’approche monolithique., itératif.
● Modéliser le système en une suite de sous systèmes relier par des flux sous lesquelles on peux appliquer des filtres pour modifier les données, les router….
● Facilite les tests, la maintenance, les évolutions, les cadences…..
● Représente le fil de message qui connecte les producteurs et les consommateurs.
● Relient les filtres entre eux.
● Pour Spring, c’est une structure de données en mémoire mais qui offre des possibilités de persistance, de haute disponibilité, de Claim Check, de fail over, Transaction..
Message Channel (Pipe)
Spring IntégrationRelever les défis de l’intégration d’entreprise
Message Channel Point-to-point (P2P)
Spring IntégrationRelever les défis de l’intégration d’entreprise
Producteur
Consommateur
Consommateur
Consommateur
Channel
● Plusieurs consommateurs possibles.
● Le message n’est consommé que par un consommateur.
Message Channel Publish-Suscribe.
Spring IntégrationRelever les défis de l’intégration d’entreprise
Producteur
Consommateur
Consommateur
Consommateur
Channel
● Plusieurs consommateurs possibles.
● Les messages sont consommés par l”ensemble des consommateurs.
Message Channel HandOff (Sync)
Spring IntégrationRelever les défis de l’intégration d’entreprise
Producteur
Consommateur
ConsommateurChannel
Thread
● La publication et la consommation des messages dans un seul Thread.
● La consommation est synchrone.
Message Channel HandOff (ASync)
Spring IntégrationRelever les défis de l’intégration d’entreprise
Producteur
Consommateur
ConsommateurChannel
Thread
● La publication et la consommation sont dans des Threads distincts.
● La consommation est asynchrone.
Thread
● PoolableChannel (P2P, Asynchrone)○ QueueChannel
■ PriorityChannel■ RendezvousChannel.
● SubscribableChannel○ DirectChannel (P2P, sync)○ PublishSuscribeChannel. (Pub/Sub, Asynchrone)○ ExecutorChannel (P2P, async)
Message Channel les différents types
Spring IntégrationRelever les défis de l’intégration d’entreprise
Message Channel Exemples● Intégration fichier de contexte avec Espace de nom
spécifique
Spring IntégrationRelever les défis de l’intégration d’entreprise
<int:channel id="queueChannel"><queue capacity="25"/><int:queue message-store="messageStore">
</int:channel><int-jdbc:message-store id="messageStore" data-source="someDataSource"/>
<int:publish-subscribe-channel id="pubsubChannel" task-executor="someExecutor"/>
<bean id="someExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor" />
Déclaration en programmation ou par annotation possible.
Message
Spring IntégrationRelever les défis de l’intégration d’entreprise
● C'est l'enveloppe générique qui permet de faire transiter les données au travers des Message Channels.
Headers : ● Stocker des "meta-data" sur le
message● On peut stocker en programmation
des variables dans le “header” sous forme de clé/valeur.
PayLod : ● C'est le corps du message ; il peut
encapsuler n'importe quel Objet Java.
Message
Spring IntégrationRelever les défis de l’intégration d’entreprise
● Les Headers des messages des meta-data sous forme de HashMap
Header Name Header Type
ID Identifiant unique du message
TIMESTAMP Date de publication
CORRELATION_ID Permettre l’agrégation de message
REPLY_CHANNEL Permettre de préciser un channel de retour
ERROR_CHANNEL (DMQ) Permettre de préciser un channel d’erreur
SEQUENCE_NUMBER Permettre l’agrégation de message
SEQUENCE_SIZE Permettre l’agrégation de message
EXPIRATION_DATE Date d’expiration
PRIORITY Prioriser les messages dans un channel
Router
Spring IntégrationRelever les défis de l’intégration d’entreprise
Producteur
● Router un message vers un sous process différent en fonction des conditions du Message header ou contenu du PayLoad.
● Le choix des destinations peut être statique ou dynamique.
Router
Spring IntégrationRelever les défis de l’intégration d’entreprise
● Les composants Router statiques de Spring Intégration
HeaderValueRouter Il se base sur la valeur d'une propriété du header pour définir le "MessageChannel" de destination.
RecipientListRouter Permet de travailler avec plusieurs MessageChannel de destination en fonction de critères.
PayLoadTypeRouter Permet un routage en fonction du type de PayLoad.
ErrorMessageExceptionTypeRouter Type Exception du PayLoad.
Router Exemples Statique
Spring IntégrationRelever les défis de l’intégration d’entreprise
<int:channel id="inputChannel"><int:channel id="channel1"><int:channel id="channel2"><int:channel id="channel3">
<int:recipient-list-router id="customRouter" input-channel="inputChannel"><int:recipient channel="channel1"/><int:recipient channel="channel2"/>
<int:recipient channel="channel3" selector-expression="headers.containsKey('bar')" /></int:recipient-list-router>
SPEL (Spring Expression Language)
BroadCasting
Router Exemples Dynamique
Spring IntégrationRelever les défis de l’intégration d’entreprise
public class DrinkRouter {
public String resolveOrderItemChannel(OrderItem orderItem) {return (orderItem.isIced()) ? "coldDrinks" : "hotDrinks";
}}
<int:router input-channel="drinks" ref="drinkRouter"method="resolveOrderItemChannel"/>
<int:channel id="coldDrinks"><int:queue capacity="10"/>
</int:channel>
<int:channel id="hotDrinks"><int:queue capacity="10"/>
</int:channel>
- Cast Auto du PayLoad.- Retour ref channel dans le contexte
Splitter
Spring IntégrationRelever les défis de l’intégration d’entreprise
● Découper un message en plusieurs sous-messages, déléguer à une classe tiers.
● Plusieurs propriétés du header sont utilisées pour ensuite résoudre l’agrégation.
○ CORRELATION_ID ○ SEQUENCE_SIZE○ SEQUENCE_NUMBER.
Splitter Exemples
Spring IntégrationRelever les défis de l’intégration d’entreprise
public class OrderSplitter {
public List<OrderItem> split(Order order) {return order.getItems();
}}
<int:splitter id="splitter" ref="splitterBean" method="split" input-channel="inputChannel" output-channel="outputChannel"/>
<int:channel id="inputChannel"/><int:channel id="outputChannel"/>
Agregator
Spring IntégrationRelever les défis de l’intégration d’entreprise
● C’est le miroir du Splitter, il sert à agréger plusieurs messages en un seul.
● Il utilise les propriétés spécifiques du header.○ CORRELATION_ID ○ SEQUENCE_SIZE○ SEQUENCE_NUMBER.
● “State-Full” problème de mémoire, utilisation du Claim Check Patern.
Agregator Exemples
Spring IntégrationRelever les défis de l’intégration d’entreprise
public class OrderAgregator {
public Order agregate(List < OrderItem> orders) {return new Order(orders);
}}
<int:aggregator input-channel="inputChannel" ref="orderAgregator"
method="agregate" output-channel="outputChannel"/>
<int:channel id="inputChannel"/><int:channel id="outputChannel"/>
Channel Adaptor
Spring IntégrationRelever les défis de l’intégration d’entreprise
● Permet d'interfacer une application, un middleware, un transport vers le système de messagerie.
AMQP File FTP/FTPS
HTTP
TCP/UDP
JDBCJPAJMS
MailMongoDbRMI ………..
D’autres composants
Spring IntégrationRelever les défis de l’intégration d’entreprise
Permet de filtrer un message pour un passage d’un channel à un autre.SPEL sur header ou payload ou via une classe externe.
Permettre de transformer ou enrichir un message, pratique pour effectuer des étapes de sérialisation/désérialisation d’objets. Spring fourni un certain nombre de composants : XML ⇔ Object, JSON ⇔ Object...
Service Activator permet de connecter l’entrée et la sortie d’un service, à des Channels.
Gateway est un proxy qui permet d'interagir avec un channel de manière découplée (Idem RmiProxyFactoryBean….)
….. Le Livre Entreprise Application Pattern définit plus de 65 Idéogramme Spring Intégration les implémente tous.
Sping Intégration Inter et Intra Process.
Spring IntégrationRelever les défis de l’intégration d’entreprise
Service Web Le Service.
Transformer
Transformer
Poling
Adapter
Activator
JVM
Le Service.
JVM
Le Service.
Cas d’usage : le comparateur de Prix
Spring IntégrationRelever les défis de l’intégration d’entreprise
Site Web
CB \ WS
CC \ File
CA \ DataBase
Gateway Request/Reply
Splitter 1 par Comp
Routing id Comp dans Header
Transformer PreparedStatement
AdaptorJDBC
Transformer Serialize SOAP
AdaptorWS
Transformer java.io.File
AdaptorFile
Poling DirectoryAgregator
Spring MVC
Spring IntégrationRelever les défis de l’intégration d’entreprise
Cas d’usage : Envois des cartes de Tiers Payant.
PréstataireFTP
RPCRMI
Services CRM
File Directory
<int-file:inbound-channel-adapter id="filesChannel" directory="file:${input.directory}" prevent-duplicates="true"> <int-file:nio-locker /> <int:poller fixed-rate="1000"/> <int-file:inbound-channel-adapter/>
<int-file:file-to-bytes-transformer input-channel="filesChannel" output-channel="bytesChannel" delete-files="true"/>
<int:service-activator input-channel="bytesChannel"ref="serviceEditique"
method="nouvelleCarte"><int:poller task-executor="pool" fixed-rate="1000"/>
</int:service-activator>
<task:executor id="pool" pool-size="5"/>
<bean id="userService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean"> <property name="serviceUrl" value="rmi://localhost:1097/userService"/>
<property name="serviceInterface" value="com.camaris.interfaces.UserService"/> <property name="refreshStubOnConnectFailure" value="true"/>
</bean>
File AdapterPoling
TransformerFile ⇔ byte
Service Activator
File
Bytes[]
Spring IntégrationRelever les défis de l’intégration d’entreprise
Cas d’usage : Gestion des Personnes.
Site WebWeb ServicesXML, SOAP
Services Site Web
Front Office Sprint MVC
RPCRMI
Services CRM
API REST .NetJSON
Services AIA
PostgresSql
PostgresSql
Oracle
CRM
Front Office Sprint MVC
AIA
Front OfficeClient Lourd C++
Spring IntégrationRelever les défis de l’intégration d’entreprise
Processus Gestion des Personnes.Site Web
Web ServicesXML, SOAP
Services Site Web
RPC / Spring RemotingRMI
API REST .NetJSON
Services AIA
PostgresSql
PostgresSql
Oracle
Services CRM
Messagerie
Transformer Object ⇔ XML
Transformer Object ⇔ JSON
Service Activator
Adapter WS
Adapter HTTP
Filter Seulement Adhérent
CRM
Front Office Sprint MVC
AIA
Front OfficeClient Lourd C++
Front Office Sprint MVC
Gateway
Router ListIdentifaint Source Dans Header
Filter ExtId
Adapter JDBC/Poling
Spring IntégrationRelever les défis de l’intégration d’entreprise
Monitoring.
Channel Interceptor
Wire-Tap
Message History
JMX
Spring IntégrationRelever les défis de l’intégration d’entreprise
Historique du Projet.● 1.0.0 Nov 2008● 2.0.0 Nov 2010● 2.1.0 Janv 2012● 2.2.0 Mai 2013 Le projet en pleine essor.
accélération des versions tous les 2-3 Mois.
● 2.2.5 Septembre 2013● 2.3.0M3 Sept 2013● …...
Beta version en parallèle.
Spring IntégrationRelever les défis de l’intégration d’entreprise
FAQ : Sprint Intégration Vs Apache Camel
● Sa facilité d’intégration et d’utilisation dans un écosystème Spring.
● Composant sur étagère, pas de différente version pour un même composant.
● 1:1 EIP, pas de concept supplémentaire.
Spring IntégrationRelever les défis de l’intégration d’entreprise
FAQ : Et les ESB ?
● Un ESB est une offre Middleware complète.
● Spring Intégration est un frameworks une boite à outils basé sur les EIP.
● Spring Intégration est dis LightWeight.
● Spring Intégration l’ESB Light.