C'est fondamentalement une manière conceptuelle de concevoir un système - les éditeurs de logiciels essaient de vous vendre plus en collant l'autocollant «ESB» dessus et les gestionnaires aiment parce qu'un ESB a l'air bien d'un «niveau supérieur».
Un ESB est essentiellement un MOM (middleware orienté message) avec un modèle de données supplémentaire et une gestion de la définition de la structure. Vous avez une définition de données commune pour toutes les applications et adaptateurs sur ce bus (peut être XML avec un XSD partagé). Tout ce qui se connecte DOIT envoyer ses informations conformément à cette définition de données. L'ESB prend en charge le chargement, le partage et la gestion des versions de cette définition de données commune. Lors de la connexion d'un nouveau composant à un ESB, vous pouvez vous attendre à plus de «compatibilité» dès la sortie de la boîte que lors de la connexion à un MOM. Chaque composant sur ce bus est conceptuellement traité comme une «ressource» - il y a donc une abstraction supplémentaire introduite pour découpler l'expéditeur du récepteur.
Exemple: disons que vous voulez connecter l'application A à l'application B dans un middleware orienté message standard, prenons JMS. Vous discutez avec vos collègues travaillant sur l'application B, convenez d'un sujet, d'un type de message et de champs et envoyez-le (pseudo code): sendJms ("TRADE.MSFT", {MapMessage trader = "pete" price = 101.4 vol = 100})
Si vous faites la même chose dans une architecture orientée services, vous devez
- installer un logiciel supplémentaire
- apprenez beaucoup de nouveaux concepts
- définir votre nouveau composant Java dans l'interface d'administration de l'ESB
- implémenter certaines interfaces contrôlées par l'ESB
- sendJms (getDestination (), {MapMessage trader = "pete" price = 101.4 vol = 100}) - notez que la destination est injectée depuis l'ESB
La première fois, c'est probablement un peu douloureux, mais je suppose que vous pouvez vous y habituer, tout comme vous pouvez vous habituer aux EJB ;-)
Vous pourriez dire qu'un système MOM est «non typé» (structure dynamique) tandis qu'un ESB est «typé» (structure statique). Les compromis entre la messagerie brute et ESB sont similaires à d'autres choix non typés / typés:
- REST vs SOAP
- XML non validé vs XML validé avec un XSD
- Groovy contre Java
- langage interprété vs langage compilé
Pour les petits projets, il est agréable de hacher rapidement les fonctionnalités (par exemple le code Groovy) mais pour les projets plus importants, il est bon d'avoir un débogueur (par exemple Java), d'être averti à l'avance lorsque les choses se cassent et d'avoir un standard pour les personnes avant de s'engager dans le projet.
Donc, si votre projet souffre d'un trop grand nombre de personnes qui cassent le système en enregistrant des modifications non validées, passez à plus de structure (ESB au lieu de MOM). Si vos projets souffrent de ne pas faire suffisamment de choses à temps, choisissez la solution la plus simple et non typée. Si c'est les deux, faites appel à un consultant (je plaisante ;-)