RabbitMQ là một Message Broker (Phần mềm môi giới tin nhắn) mã nguồn mở rất phổ biến, được viết bằng ngôn ngữ Erlang. Nó đóng vai trò như một phần mềm trung gian giúp các ứng dụng, hệ thống hoặc vi dịch vụ (Microservices) giao tiếp với nhau một cách bất đồng bộ (asynchronous), đáng tin cậy và linh hoạt.
Kafka tập trung vào xử lý luồng dữ liệu (Event Streaming), còn RabbitMQ tập trung vào việc xếp hàng (Queueing) và định tuyến (Routing) tin nhắn.
Kiến Trúc và Các Thành Phần Chính
RabbitMQ hoạt động dựa trên giao thức AMQP (Advanced Message Queuing Protocol) và sử dụng mô hình Producer/Consumer.
| Thành Phần | Vai trò |
| Producer | Ứng dụng/hệ thống tạo và gửi (publish) tin nhắn đến RabbitMQ Broker. |
| Consumer | Ứng dụng/hệ thống nhận và xử lý (consume) tin nhắn từ Queue. |
| Broker (RabbitMQ Server) | Máy chủ trung tâm nhận tin nhắn từ Producer, định tuyến, lưu trữ và gửi chúng đến Consumer. |
| Message | Dữ liệu được truyền tải giữa Producer và Consumer. |
| Queue (Hàng đợi) | Nơi lưu trữ tạm thời các tin nhắn trước khi Consumer xử lý. Queue hoạt động theo cơ chế hàng đợi (FIFO – First-In, First-Out). |
| Exchange (Bộ định tuyến) | Nhận tin nhắn từ Producer và quyết định tin nhắn đó sẽ được gửi tới Queue nào. Exchange có nhiều loại khác nhau với quy tắc định tuyến phức tạp. |
| Binding (Liên kết) | Là mối quan hệ logic liên kết một Exchange với một Queue. |
| Routing Key (Khóa định tuyến) | Một “địa chỉ” mà Producer gửi kèm theo tin nhắn. Exchange sẽ dựa vào Routing Key và loại Exchange để định tuyến tin nhắn đến Queue phù hợp. |
Ứng Dụng Phổ Biến
RabbitMQ là lựa chọn hàng đầu cho các trường hợp:
- Phân tách các thành phần (Decoupling): Giúp các dịch vụ không phụ thuộc trực tiếp vào nhau, làm tăng khả năng mở rộng và dễ dàng bảo trì trong kiến trúc Microservices.
- Xử lý tác vụ nền (Background Jobs) và Tác vụ nặng: Đẩy các tác vụ tốn thời gian (ví dụ: gửi email, tạo báo cáo, xử lý hình ảnh) vào hàng đợi để Consumer xử lý sau, giúp ứng dụng phản hồi nhanh hơn.
- Cân bằng tải: Phân phối các tin nhắn đến nhiều Consumer đang hoạt động để xử lý song song và tránh quá tải cho một dịch vụ.
- Định tuyến phức tạp: Sử dụng các loại Exchange khác nhau để thiết lập các mô hình giao tiếp đa dạng như Point-to-Point (Queue) hoặc Publish/Subscribe (Topic).