Engineering Notes

Tìm hiểu ESB và Message Queue: Kiến trúc & Case Study

By Ginbok4 min read

Giới thiệu về các mô hình tích hợp hiện đại

Trong kiến trúc phần mềm hiện đại, đặc biệt là khi chuyển đổi từ Monolith sang Microservices, cách thức các hệ thống giao tiếp với nhau là cực kỳ quan trọng. Hai mô hình phổ biến để xử lý việc này là Message Queue (MQ)Enterprise Service Bus (ESB).

Message Queue (MQ) là gì?

Message Queue là một hình thức giao tiếp bất đồng bộ giữa các dịch vụ. Nó cung cấp một vùng lưu trữ tạm thời, nơi các thông điệp (messages) được giữ cho đến khi chúng được xử lý bởi bên nhận (consumer). Mô hình này hoạt động theo nguyên lý "điểm-đến-điểm" hoặc "người sản xuất-người tiêu dùng".

Tại sao cần Message Queue?

Enterprise Service Bus (ESB) là gì?

ESB là một mô hình kiến trúc phức tạp hơn, đóng vai trò như một "trục xe" trung tâm hoặc lớp trung gian (middleware). Khác với một hàng đợi đơn giản, ESB cung cấp các tính năng như điều hướng thông điệp (routing), chuyển đổi giao thức và áp dụng các quy tắc nghiệp vụ.

Tại sao cần ESB?

So sánh nhanh: MQ vs. ESB

Hãy coi MQ như một "đường ống" vận chuyển dữ liệu từ A đến B. Hãy coi ESB như một "bộ định tuyến và thông dịch viên" quyết định dữ liệu đi đâu và cần chuyển đổi sang định dạng nào trước khi đến đích.

Ví dụ thực tế: C# Message Producer

Dưới đây là ví dụ đơn giản về cách gửi một message vào hàng đợi bằng RabbitMQ trong .NET:


using RabbitMQ.Client;
using System.Text;

var factory = new ConnectionFactory { HostName = "localhost" };
using var connection = factory.CreateConnection();
using var channel = connection.CreateModel();

channel.QueueDeclare(queue: "order_queue",
                     durable: true,
                     exclusive: false,
                     autoDelete: false,
                     arguments: null);

string message = "Đơn hàng mới: #12345";
var body = Encoding.UTF8.GetBytes(message);

channel.BasicPublish(exchange: string.Empty,
                     routingKey: "order_queue",
                     basicProperties: null,
                     body: body);

Console.WriteLine($"[x] Đã gửi: {message}");
    

Các Case Study phổ biến

1. Xử lý đơn hàng E-Commerce (MQ)

Khi khách hàng nhấn "Mua ngay", hệ thống web đẩy một thông điệp vào MQ. Khách hàng nhận ngay thông báo "Đã nhận đơn". Ở phía sau, các dịch vụ kho bãi, thanh toán và vận chuyển sẽ lấy thông điệp đó ra xử lý theo tốc độ của chúng, giúp website không bị chậm trong các dịp khuyến mãi lớn.

2. Tích hợp ngân hàng cũ (ESB)

Một ứng dụng ngân hàng di động hiện đại cần giao tiếp với hệ thống mainframe chạy COBOL đã 30 năm tuổi. ESB được dùng để dịch các yêu cầu JSON từ ứng dụng di động sang định dạng dữ liệu của mainframe, đồng thời ghi dữ liệu giao dịch vào một database kiểm toán riêng biệt.

3. Theo dõi logistics thời gian thực (MQ & Pub/Sub)

Xe tải giao hàng gửi tọa độ GPS mỗi giây. Sử dụng một message broker (như Kafka), các cập nhật này được phát sóng đồng thời tới dịch vụ bản đồ cho khách hàng và bảng điều khiển quản lý cho người vận hành.

#backend#performance#security
← Back to Articles
Tìm hiểu ESB và Message Queue: Kiến trúc & Case Study - Ginbok