tech days spring intégration

53
Spring Intégration Relever les défis de l’intégration d’entreprise

Upload: arrow-institute

Post on 28-May-2015

416 views

Category:

Technology


5 download

DESCRIPTION

Une Introduction au Framework Spring Integration

TRANSCRIPT

Spring IntégrationRelever les défis de l’intégration d’entreprise

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

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…..

Pipes-and-Filters

Spring IntégrationRelever les défis de l’intégration d’entreprise

● 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

Support dans les IDE

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.

Spring IntégrationQuestions ?