Ini pada dasarnya adalah cara konseptual untuk merancang sistem - perusahaan perangkat lunak mencoba menjual lebih banyak kepada Anda dengan menempelkan stiker 'ESB' di atasnya dan manajer menyukainya karena ESB terlihat bagus dari 'tingkat yang lebih tinggi'.
ESB pada dasarnya adalah MOM (middleware berorientasi pesan) dengan model data tambahan dan manajemen definisi struktur. Anda memiliki definisi data umum untuk semua aplikasi dan adaptor di bus itu (bisa berupa XML dengan XSD bersama). Apa pun yang terhubung HARUS mengirimkan informasi yang sesuai dengan definisi data ini. ESB mendukung pemuatan, pembagian, dan pembuatan versi dari definisi data umum ini. Saat menghubungkan komponen baru ke ESB, Anda dapat mengharapkan lebih banyak 'kompatibilitas' di luar kotak daripada saat menghubungkannya ke MOM. Setiap komponen di bus itu secara konseptual diperlakukan sebagai 'sumber daya' - jadi ada abstraksi tambahan yang diperkenalkan untuk memisahkan pengirim dari penerima.
Contoh: katakanlah Anda ingin menghubungkan aplikasi A dengan aplikasi B dalam middleware berorientasi pesan standar, mari kita gunakan JMS. Anda berbicara dengan kolega Anda yang mengerjakan aplikasi B, menyetujui topik, jenis pesan, dan bidang, lalu mengirimkannya (kode semu): sendJms ("TRADE.MSFT", {MapMessage trader = "pete" price = 101,4 vol = 100})
Jika Anda melakukan hal yang sama dalam arsitektur berorientasi layanan, Anda harus melakukannya
- instal perangkat lunak tambahan
- mempelajari banyak konsep baru
- tentukan komponen Java baru Anda di gui admin ESB
- menerapkan beberapa antarmuka yang dikontrol oleh ESB
- sendJms (getDestination (), {MapMessage trader = "pete" price = 101.4 vol = 100}) - perhatikan bahwa tujuan diinjeksi dari ESB
Pertama kali mungkin agak menyakitkan, tapi saya rasa Anda bisa terbiasa, sama seperti Anda bisa terbiasa dengan EJB ;-)
Bisa dibilang sistem MOM adalah 'untyped' (struktur dinamis) sedangkan ESB adalah 'typed' (struktur statis). Pengorbanan dari Pesan mentah vs ESB mirip dengan pilihan lain yang tidak diketik / diketik:
- REST vs. SOAP
- XML vs XML yang tidak divalidasi dengan XSD
- Groovy vs. Java
- bahasa yang ditafsirkan vs. bahasa yang dikompilasi
Untuk proyek yang lebih kecil, lebih baik untuk memilah fungsionalitas dengan cepat (misalnya kode Groovy) tetapi untuk proyek yang lebih besar, ada baiknya memiliki debugger (misalnya Java), untuk diperingatkan terlebih dahulu ketika ada yang rusak dan memiliki standar untuk orang-orang sebelumnya mereka berkomitmen pada proyek.
Jadi, jika proyek Anda menderita karena terlalu banyak orang yang merusak sistem dengan memeriksa perubahan yang tidak divalidasi - beralihlah ke lebih banyak struktur (ESB daripada MOM). Jika proyek Anda menderita karena tidak menyelesaikan cukup banyak hal tepat waktu - pilih solusi yang lebih sederhana dan tidak berjenis. Jika keduanya - dapatkan konsultan (bercanda ;-)