RabbitMQ là gì?

  • RabbitMQ là một message broker, triển khai giao thức AMQP (Advanced Message Queuing Protocol). Nhiệm vụ chính là tiếp nhận, lưu trữ tạm thời và chuyể n tiếp message giữa các Producer (gửi) và Consumer (nhận).
  • Mục đích sử dụng RabbitMQ: phân tách các thành phần khác nhau trong hệ thống, xử lý bất đồng bộ, cân bằng tải các tác vụ và đảm bảo truyền tin tin cậy.

Các khái niệm chính RabbitMQ

  • Broker: server RabbitMQ, là thành phần trung gian (middleware) giữa các ứng dụng hoặc dịch vụ, có nhiệm vụ nhận, lưu trữ tạm thời, định tuyến và chuyển tiếp các message từ producer đến consumer.
  • Exchange: nơi Producer gửi message. Exchange quyết định route message đến queue bằng các rules. Có 4 loại Exchange phổ biến:
    • Direct Exchange: gửi message đến queue dựa trên routing key chính xác. Producer khi publish message sẽ kèm một routing key. Queue nào được bind đến Exchange với cùng routing key thì sẽ nhận message. Thường dùng để phân loại theo tác vụ (info, warning, error,…) hoặc xử lý tác vụ cụ thể.
    • Fanout Exchange: Broadcast  message đến tất cả các queue bind vào nó, bỏ qua routing key. Thường dùng cho push notification, chat room, system notification.
    • Topic Exchange: Dựa trên pattern của routing key (dùng * hoặc #). Routing key thể hiện dưới dạng chuỗi tách bởi dấu chấm. Thường dùng cho hệ thống logging phân cấp hoặc event system.
      • *: một từ duy nhất. ví dụ: Queue A bind với user.* => nhận user.create, user.delete nhưng không nhận user.profile.update
      • #: 0 hoặc nhiều từ. Queue B bind với user.# => nhận mọi thứ bắt đầu bằng user. (như user.create, user.profile.update, user.login.mobile).
    • Headers Exchange: route message dựa vào header (thuộc tính), không dựa vào routing key. khi bind queue vào exchange, cần chỉ định 1 tập header key-value và chế độ x-match (any/all). Thường dùng khi cần route dựa trên nhiều thuộc tính meta, filter email,…
  • Queue: nơi lưu message chờ consumer tiêu thụ.
  • Binding: liên kết giữa Exchange và Queue (với Routing key).
  • Routing key: key để map message từ exchange đến queue.
  • Delivery Tag và Ack: Consumer phải ack message để broker biết đã xử lý thành công: nếu không ack, message có thể được request.

Ứng dụng RabbitMQ trong hệ thống backend API

  • Xử lý background jobs/ task queues: gửi email, gửi SMS, push notification, xử lý file/ảnh, tạo PDF,… API nhận Request => push job vào queue => consumer lấy và xử lý.
  • Buffering & smoothing traffic: khi lượng request API tăng đột biến, queue nhận hết các job, consumer scale dần để xử lý.
  • Event-driven microservices: Service A publish event (order.created) → nhiều service subscribe (inventory, notification, accounting).
  • Pub/Sub: Fanout/Topic Exchange gửi noti tới nhiều consumers (notifications, realtime update)
  • Worker distribution: nhiều workers (consumers) cùng đọc từ một queue, giúp cân bằng tải RabbitMQ.

So sánh với các công nghệ tương tự

  • Kafka: tốt cho event streaming, retention dài, throughput rất cao, consumer là stream processors. RabbitMQ thích hợp cho task queue, latency thấp, routing linh hoạt.
  • Redis Stream: nhẹ, dễ triển khai, Kafka/RabbitMQ mạnh hơn khi cần routing mạnh/AMQP features.
  • SQS/Cloud queues: managed, ít bận tâm vận hành nhưng thiếu tính năng routing đa dạng của RabbitMQ.

 

 

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

Blockchain

Blockchain là gì? Blockchain là một công nghệ sổ cái phân tán (distributed ledger) lưu trữ dữ liệu dưới dạng các khối (blocks) được liên kết với nhau theo chuỗi (chain) bằng các hàm băm mật mã (cryptographic hash). Mỗi khối chứa danh sách các giao dịch, dấu thời gian, và tham chiếu đến khối […]

Computer Graphics

1. Ray Tracing Là một kỹ thuật mô phỏng ánh sáng trong đồ họa máy tính nhằm tạo ra hình ảnh cực kỳ chân thực. Phương pháp này dựa trên việc mô phỏng hành trình của các tia sáng từ mắt người (camera) đi vào không gian 3D, và tính toán cách chúng tương tác […]

So sánh GORM vs go-pg vs Bun

Cộng đồng GORM Là ORM phổ biến nhất trong cộng đồng Go. Có nhiều tài liệu, ví dụ, StackOverflow câu trả lời, và nhiều package hỗ trợ mở rộng. Nhiều developer đã từng dùng Gorm. go-pg Từng rất phổ biến khi chỉ dùng PostgreSQL, nhưng đang bị Bun thay thế dần. Ít được duy trì […]

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 […]