RabbitMQ là gì?

RabbitMQ là một phần mềm trung gian giúp các hệ thống, server, ứng dụng có thể giao tiếp, trao đổi dữ liệu với nhau. Nhiệm vụ của RabbitMQ được hiểu đơn giản là: nhận message từ nhiều nguồn => lưu trữ, sắp xếp sao cho hợp lý => đẩy tới đích đến. Là một message broker mã nguồn mở, có dung lượng nhẹ, dễ dàng triển khai trên rất nhiều hệ điều hành lẫn Cloud, vì thế RabbitMQ vô cùng được ưa chuộng và trở nên phổ biến trong thời gian qua.

RabbitMQ hoạt động như thế nào?

Luồng message trong RabbitMQ hoạt động như sau:

  • Producer gửi một message tới một exchange. Exchange phải được chỉ định type khi được tạo.
  • Exchange nhận được message và chịu trách nhiệm định tuyến message. Việc trao đổi sẽ tính đến các thuộc tính của message và loại exchange, chẳng hạn như routing key.
  • Giữa exchange và queue phải thiết lập bindings từ trước. Exchange định tuyến message vào queue tùy thuộc vào thuộc tính của message. Trong ví dụ trên, có 2 bindings từ exchange với 2 queue khác nhau.
  • Các message vẫn ở trong queue cho đến khi chúng được consumer xử lý.
  • Consumer xử lý message.

Các thành phần chính trong RabbitMQ

Producer

  • Là thành phần gửi thông điệp vào RabbitMQ.
  • Có thể là một ứng dụng backend, frontend, hoặc bất kỳ service nào.
  • Producer không gửi trực tiếp message vào Queue mà gửi đến một Exchange.

Exchange

  • Exchange là trung tâm phân phối (router) của RabbitMQ.
  • Nhận message từ Producer, sau đó định tuyến (route) message đến các Queue dựa vào routing keybinding.
  • Có 4 loại Exchange:
    • Direct: Message được định tuyến đến queue có routing key chính xác.
    • Fanout: Message được gửi đến tất cả queue liên kết (broadcast).
    • Topic: Dùng pattern (wildcard như *, #) để định tuyến.
    • Headers: Dựa vào header thay vì routing key (ít dùng).

Queue

  • Queue là nơi lưu trữ message tạm thời cho đến khi có consumer xử lý.
  • Queue chỉ nhận message từ exchange (không từ producer trực tiếp).
  • RabbitMQ đảm bảo thứ tự FIFO (first in – first out).
  • Một số thuộc tính của Queue:
    • Durable: Queue tồn tại sau khi RabbitMQ restart.
    • Exclusive: Chỉ dùng cho kết nối tạo ra nó, sẽ bị xóa sau khi kết nối đóng.
    • Auto-delete: Bị xóa tự động khi không còn consumer nào lắng nghe.

Binding

  • Binding là mối quan hệ giữa Exchange và Queue.
  • Có thể hiểu là luật định tuyến cho message.
  • Thường dùng kết hợp với routing key.

Routing Key

  • Là chuỗi string, do producer cung cấp, dùng để định hướng message.
  • Tùy theo loại Exchange, routing key sẽ có vai trò khác nhau:
    • Direct: so khớp chính xác.
    • Topic: hỗ trợ pattern (* đại diện cho 1 từ, # đại diện cho nhiều từ).
    • Fanout: routing key bị bỏ qua.
    • Headers: không dùng routing key.

Consumer

  • Consumer là ứng dụng hoặc tiến trình nhận và xử lý message từ Queue.
  • Có thể là một worker, background service, hoặc microservice.
  • Khi message được consumer xử lý xong, RabbitMQ có thể:
    • Tự động xóa message (auto-ack).
    • Hoặc chờ consumer gửi xác nhận (manual ack).

Message

  • Là đơn vị thông tin được truyền từ Producer đến Consumer.
  • Một message gồm:
    • Body (nội dung chính)
    • Properties (metadata: timestamp, content_type, …)
    • Headers (key-value tùy chọn để định tuyến)

Virtual Host (vhost)

  • RabbitMQ cho phép tạo nhiều môi trường độc lập trong một server thông qua vhost.
  • Mỗi vhost chứa riêng các queue, exchange, binding, user.

Connection và Channel

  • Connection: kết nối TCP giữa ứng dụng và RabbitMQ server.
  • Channel: kết nối logic nằm trong Connection.
    • RabbitMQ khuyến nghị dùng 1 Connection với nhiều Channel, thay vì tạo nhiều connection.

Tóm tắt luồng hoạt động:

Producer → Exchange → [Binding + Routing Key] → Queue → Consumer

Ứng dụng của RabbitMQ

  • Gửi thông báo (email, SMS).
  • Hàng đợi tác vụ (task queue, background jobs).
  • Giao tiếp giữa các microservices.
  • Truyền dữ liệu real-time (log, event streaming).
  • Dùng trong các hệ thống như: eCommerce, IoT, trò chơi trực tuyến…

 

Tham khảo: RabbitMQ là gì? RabbitMQ hoạt động như nào? | 200Lab Blog

 

About the Author

Đức Phát

View all author's posts

Leave a Comment

Your email address will not be published. Required fields are marked *

Bài viết khác

Sử dụng Request/Response trong ứng dụng RESTful mô hình MVC

DTO là gì? DTO (Data Transfer Object) là một object trung gian dùng để truyền dữ liệu giữa client – server hoặc giữa các service trong ứng dụng web/API theo kiến trúc RESTful API. DTO chỉ chứa các thông tin cần thiết mà client hoặc service khác cần (ví dụ: Login Form chỉ cần thông […]

Docker

Docker là gì? Docker là một nền tảng mã nguồn mở cho phép bạn đóng gói, phân phối và chạy ứng dụng bên trong các “container” – những môi trường ảo nhẹ, cô lập nhưng vẫn chia sẻ nhân hệ điều hành của máy chủ. Khái niệm then chốt ở đây là “containerization”: thay vì […]

Kiểm thử phần mềm

Testing là gì? Quá trình kiểm thử phần mềm (software testing) là một chuỗi hoạt động có hệ thống nhằm đánh giá chất lượng, độ ổn định và tính đúng đắn của một ứng dụng so với yêu cầu ban đầu. Không đơn thuần chỉ là tìm ra lỗi, testing còn giúp đảm bảo rằng […]

Cache

Cache là gì? Cache là một bộ nhớ tạm (nhanh) được sử dụng để lưu trữ tạm thời dữ liệu thường xuyên được truy cập, nhằm giảm độ trễ và tăng hiệu suất của hệ thống. Cache thường được sử dụng ở Client, như CPU, applications, web browsers hoặc operating systems (OSes). Một số Cache phổ […]

Tìm hiểu Kafka

Kafka là gì? Apache Kafka là một nền tảng phân phối sự kiện phân tán mã nguồn mở được phát triển bởi Apache Software Foundation và được viết bằng Java và Scala. Kafka ban đầu được phát triển bởi LinkedIn và sau đó được mở nguồn cho Quỹ phần mềm Apache (Apache Software Foundation) vào đầu năm 2011. (đồng sáng lập […]

Tìm hiểu về Message Broker

Message Broker là gì Message Broker (hay còn gọi là “trình môi giới thông điệp”) là một thành phần trung gian chuyên xử lý việc gửi, nhận, định tuyến và chuyển tiếp thông điệp (message) giữa các thành phần (ứng dụng, dịch vụ) trong hệ thống. Nó cho phép giao tiếp phi đồng bộ giữa […]