È fondamentalmente un modo concettuale per progettare un sistema: le società di software cercano di venderti di più attaccandovi l'adesivo "ESB" e ai gestori piace perché un ESB sembra buono da un "livello superiore".
Un ESB è fondamentalmente un MOM (middleware orientato ai messaggi) con un modello di dati aggiunto e una gestione della definizione della struttura. Hai una definizione di dati comune per tutte le applicazioni e gli adattatori su quel bus (potrebbe essere XML con un XSD condiviso). Tutto ciò che si collega DEVE inviare le sue informazioni che aderiscono a questa definizione di dati. L'ESB supporta il caricamento, la condivisione e il controllo delle versioni di questa definizione di dati comune. Quando si collega un nuovo componente a un ESB, ci si può aspettare più "compatibilità" immediatamente rispetto a quando lo si collega a un MOM. Ogni componente su quel bus è concettualmente trattato come una "risorsa", quindi è stata introdotta un'astrazione aggiuntiva per separare il mittente dal destinatario.
Esempio: supponiamo che tu voglia connettere l'applicazione A con l'applicazione B in un middleware orientato ai messaggi standard, prendiamo JMS. Parli con i tuoi colleghi che lavorano sull'applicazione B, concordi su un argomento, tipo di messaggio e campi e invialo (pseudo codice): sendJms ("TRADE.MSFT", {MapMessage trader = "pete" price = 101,4 vol = 100})
Se fai la stessa cosa in un'architettura orientata ai servizi, devi farlo
- installare software aggiuntivo
- imparare molti nuovi concetti
- definire il nuovo componente Java nella GUI di amministrazione di ESB
- implementare alcune interfacce controllate dall'ESB
- sendJms (getDestination (), {MapMessage trader = "pete" price = 101,4 vol = 100}) - nota che la destinazione viene iniettata dall'ESB
La prima volta è probabilmente un po 'doloroso, ma immagino che ci si possa abituare, proprio come ci si può abituare agli EJB ;-)
Si potrebbe dire che un sistema MOM è "non tipizzato" (struttura dinamica) mentre un ESB è "digitato" (struttura statica). I compromessi tra la messaggistica non elaborata e l'ESB sono simili ad altre scelte non tipizzate / tipizzate:
- RIPOSO vs SAPONE
- XML non convalidato rispetto a XML convalidato con un XSD
- Groovy contro Java
- linguaggio interpretato vs. linguaggio compilato
Per progetti più piccoli è bello eseguire rapidamente l'hash delle funzionalità (ad es. Codice Groovy) ma per progetti più grandi è bene avere un debugger (ad es. Java), per essere avvisati in anticipo quando le cose si interrompono e per avere uno standard per le persone prima che si impegnino nel progetto.
Quindi, se il tuo progetto soffre di troppe persone che interrompono il sistema registrando modifiche non convalidate, passa a una struttura più ampia (ESB invece di MOM). Se i tuoi progetti soffrono di non portare a termine abbastanza cose in tempo, scegli la soluzione più semplice e non tipizzata. Se è entrambe le cose, chiama un consulente (sto scherzando ;-)