Es ist im Grunde eine konzeptionelle Art, ein System zu entwerfen - Softwareunternehmen versuchen, Ihnen mehr zu verkaufen, indem sie den ESB-Aufkleber darauf kleben, und Manager mögen es, weil ein ESB von einer höheren Ebene aus gut aussieht.
Ein ESB ist im Grunde eine MOM (Message Oriented Middleware) mit einem zusätzlichen Datenmodell- und Strukturdefinitionsmanagement. Sie haben eine gemeinsame Datendefinition für alle Anwendungen und Adapter auf diesem Bus (möglicherweise XML mit einer gemeinsam genutzten XSD). Alles, was eine Verbindung herstellt, MUSS Informationen senden, die dieser Datendefinition entsprechen. Der ESB unterstützt das Laden, Freigeben und Versionieren dieser gemeinsamen Datendefinition. Wenn Sie eine neue Komponente an einen ESB anschließen, können Sie sofort mehr Kompatibilität erwarten als beim Anschließen an eine MOM. Jede Komponente auf diesem Bus wird konzeptionell als "Ressource" behandelt. Daher wird eine zusätzliche Abstraktion eingeführt, um den Sender vom Empfänger zu entkoppeln.
Beispiel: Angenommen, Sie möchten Anwendung A mit Anwendung B in einer standardmäßigen nachrichtenorientierten Middleware verbinden. Nehmen wir JMS. Sie sprechen mit Ihren Kollegen, die an Anwendung B arbeiten, vereinbaren ein Thema, einen Nachrichtentyp und Felder und senden es (Pseudocode): sendJms ("TRADE.MSFT", {MapMessage trader = "pete" price = 101,4 vol = 100})
Wenn Sie dasselbe in einer serviceorientierten Architektur tun, müssen Sie dies tun
- Installieren Sie zusätzliche Software
- lerne viele neue Konzepte
- Definieren Sie Ihre neue Java-Komponente in der Admin-GUI des ESB
- Implementieren Sie einige Schnittstellen, die vom ESB gesteuert werden
- sendJms (getDestination (), {MapMessage trader = "pete" price = 101,4 vol = 100}) - Beachten Sie, dass das Ziel vom ESB injiziert wird
Das erste Mal ist es wahrscheinlich ein bisschen schmerzhaft, aber ich denke, man kann sich daran gewöhnen, genauso wie man sich an EJBs gewöhnen kann ;-)
Man könnte sagen, ein MOM-System ist "untypisiert" (dynamische Struktur), während ein ESB "typisiert" ist (statische Struktur). Die Kompromisse zwischen rohem Messaging und ESB ähneln denen anderer untypisierter / typisierter Optionen:
- REST vs. SOAP
- nicht validiertes XML vs. XML, das mit einer XSD validiert wurde
- Groovy gegen Java
- interpretierte Sprache vs. kompilierte Sprache
Für kleinere Projekte ist es schön, die Funktionalität schnell zu überprüfen (z. B. Groovy-Code), aber für größere Projekte ist es gut, einen Debugger (z. B. Java) zu haben, um im Voraus gewarnt zu werden, wenn etwas kaputt geht, und einen Standard für Leute zu haben, bevor sie sich dazu verpflichten Projekt.
Wenn Ihr Projekt unter zu vielen Personen leidet, die das System durch Einchecken nicht validierter Änderungen beschädigen, gehen Sie zu mehr Struktur über (ESB anstelle von MOM). Wenn Ihre Projekte nicht rechtzeitig erledigt werden, wählen Sie die einfachere, untypisierte Lösung. Wenn es beides ist - holen Sie sich einen Berater (nur ein Scherz ;-)