Zasadniczo jest to koncepcyjny sposób projektowania systemu - firmy programistyczne próbują sprzedać więcej, naklejając na to naklejkę „ESB”, a menedżerowie lubią, ponieważ ESB wygląda dobrze z „wyższego poziomu”.
ESB to w zasadzie MOM (oprogramowanie pośredniczące zorientowane na komunikaty) z dodanym modelem danych i zarządzaniem definicją struktury. Masz wspólną definicję danych dla wszystkich aplikacji i adapterów na tej magistrali (może to być XML ze współużytkowanym XSD). Wszystko, co się łączy, MUSI wysłać informacje zgodne z tą definicją danych. ESB obsługuje ładowanie, udostępnianie i wersjonowanie tej wspólnej definicji danych. Podłączając nowy komponent do ESB, możesz oczekiwać większej „kompatybilności” po wyjęciu z pudełka niż po podłączeniu go do MOM. Każdy komponent na tej magistrali jest koncepcyjnie traktowany jako „zasób” - dlatego wprowadzono dodatkową abstrakcję, aby oddzielić nadawcę od odbiorcy.
Przykład: załóżmy, że chcesz połączyć aplikację A z aplikacją B w standardowym oprogramowaniu pośredniczącym zorientowanym na komunikaty, weźmy JMS. Rozmawiasz ze swoimi kolegami pracującymi nad aplikacją B, uzgadniasz temat, typ wiadomości i pola i wysyłasz ją (pseudokod): sendJms ("TRADE.MSFT", {MapMessage trader = "pete" cena = 101,4 vol = 100})
Jeśli robisz to samo w architekturze zorientowanej na usługi, musisz to zrobić
- zainstaluj dodatkowe oprogramowanie
- nauczyć się wielu nowych koncepcji
- zdefiniuj nowy komponent Java w interfejsie administratora ESB
- zaimplementować niektóre interfejsy, które są kontrolowane przez ESB
- sendJms (getDestination (), {MapMessage trader = "pete" price = 101.4 vol = 100}) - zauważ, że miejsce docelowe jest wstrzykiwane z ESB
Za pierwszym razem to pewnie trochę bolesne, ale myślę, że można się do tego przyzwyczaić, tak jak można się przyzwyczaić do EJB ;-)
Można powiedzieć, że system MOM jest „bez typu” (struktura dynamiczna), podczas gdy ESB jest „wpisana” (struktura statyczna). Kompromisy między nieprzetworzoną wiadomością a ESB są podobne do innych opcji bez typu / wpisanych na maszynie:
- REST vs. MYDŁO
- Niezwalidowany XML vs. XML zweryfikowany za pomocą XSD
- Groovy kontra Java
- język interpretowany a język kompilowany
W przypadku mniejszych projektów dobrze jest szybko skasować funkcjonalność (np. Kod Groovy), ale w przypadku większych projektów dobrze jest mieć debugger (np. Java), aby otrzymywać ostrzeżenia z wyprzedzeniem, gdy coś się zepsuje i mieć standard dla ludzi, zanim zdecydują się na projekt.
Jeśli więc twój projekt cierpi z powodu zbyt wielu osób, które łamią system, sprawdzając niewalidowane zmiany - przejdź do większej struktury (ESB zamiast MOM). Jeśli Twoje projekty cierpią na niedostateczną realizację na czas - wybierz prostsze, nietypowe rozwiązanie. Jeśli to jedno i drugie - poproś konsultanta (tylko żartuję ;-)