Về cơ bản, đó là một cách thiết kế hệ thống theo khái niệm - các công ty phần mềm cố gắng bán cho bạn nhiều hơn bằng cách dán nhãn 'ESB' trên đó và các nhà quản lý thích bởi vì ESB trông đẹp từ 'cấp cao hơn'.
ESB về cơ bản là một MOM (phần mềm trung gian định hướng thông điệp) với một mô hình dữ liệu bổ sung và quản lý định nghĩa cấu trúc. Bạn có một định nghĩa dữ liệu chung cho tất cả các ứng dụng và bộ điều hợp trên bus đó (có thể là XML với XSD được chia sẻ). Bất cứ thứ gì kết nối PHẢI gửi thông tin đó tuân theo định nghĩa dữ liệu này. ESB hỗ trợ tải, chia sẻ và lập phiên bản của định nghĩa dữ liệu chung này. Khi kết nối một thành phần mới với ESB, bạn có thể mong đợi nhiều 'khả năng tương thích' hơn so với khi kết nối nó với MOM. Mỗi thành phần trên bus đó về mặt khái niệm được coi như một 'tài nguyên' - vì vậy có một phần trừu tượng bổ sung được giới thiệu để tách người gửi khỏi người nhận.
Ví dụ: giả sử bạn muốn kết nối ứng dụng A với ứng dụng B trong một phần mềm trung gian định hướng thông báo tiêu chuẩn, hãy sử dụng JMS. Bạn nói chuyện với đồng nghiệp của mình đang làm việc trên ứng dụng B, đồng ý về chủ đề, loại tin nhắn và các trường và gửi nó (mã giả): sendJms ("TRADE.MSFT", {MapMessage trader = "pete" price = 101,4 vol = 100})
Nếu bạn làm điều tương tự trong kiến trúc hướng dịch vụ, bạn cần
- cài đặt phần mềm bổ sung
- học rất nhiều khái niệm mới
- xác định thành phần Java mới của bạn trong gui quản trị của ESB
- triển khai một số giao diện được kiểm soát bởi ESB
- sendJms (getDestination (), {MapMessage trader = "pete" price = 101,4 vol = 100}) - lưu ý điểm đến được đưa vào từ ESB
Lần đầu tiên có lẽ hơi đau, nhưng tôi đoán bạn có thể quen với nó, giống như bạn có thể quen với EJB của ;-)
Bạn có thể nói hệ thống MOM là 'chưa định kiểu' (cấu trúc động) trong khi ESB là 'có kiểu' (cấu trúc tĩnh). Sự cân bằng giữa Nhắn tin thô so với ESB tương tự như các lựa chọn chưa định kiểu / đã nhập khác:
- REST so với SOAP
- XML chưa được xác thực so với XML được xác thực bằng XSD
- Groovy so với Java
- ngôn ngữ thông dịch so với ngôn ngữ biên dịch
Đối với các dự án nhỏ hơn, thật tốt khi băm chức năng một cách nhanh chóng (ví dụ như mã Groovy) nhưng đối với các dự án lớn hơn, tốt hơn nên có trình gỡ lỗi (ví dụ: Java), được cảnh báo trước khi mọi thứ bị hỏng và có tiêu chuẩn cho mọi người trước khi họ cam kết dự án.
Vì vậy, nếu dự án của bạn bị quá nhiều người phá vỡ hệ thống bằng cách kiểm tra các thay đổi chưa được xác nhận - hãy chuyển sang cấu trúc nhiều hơn (ESB thay vì MOM). Nếu các dự án của bạn gặp phải tình trạng không hoàn thành đủ công việc kịp thời - hãy chọn giải pháp đơn giản hơn, không kiểu cách. Nếu đó là cả hai - hãy nhờ một chuyên gia tư vấn (đùa thôi ;-)