- vừa được xem lúc

RabbitMQ Là Gì? Tại Sao Dev Nên Biết Và Dùng Nó?

0 0 5

Người đăng: Mr Phan

Theo Viblo Asia

RabbitMQ là gì?

RabbitMQ là một message broker – hay nói đơn giản hơn, nó giống như một bưu điện cho các ứng dụng: một bên gửi thư (producer), một bên nhận thư (consumer), còn RabbitMQ chịu trách nhiệm xếp hàng, phân phối, và đảm bảo thư không bị mất.

Nó giúp tách biệt giữa việc gửi dữ liệuxử lý dữ liệu, từ đó tăng tính ổn định, mở rộng, và khả năng chịu tải cho hệ thống.

Tại sao nên dùng RabbitMQ?

  1. Tách biệt xử lý nặng: ví dụ, thay vì xử lý resize ảnh, gửi email, thanh toán... ngay khi user bấm submit, bạn có thể đẩy việc đó sang queue để xử lý sau.
  2. Giảm tải cho backend: request trả về nhanh hơn, worker sẽ xử lý nặng ở phía sau.
  3. Dễ scale: cần xử lý nhiều? Tăng số lượng consumer là xong.
  4. Retry tự động: nếu job fail, có thể cấu hình retry theo logic.
  5. Đảm bảo dữ liệu không mất: RabbitMQ lưu trữ message một cách an toàn cho đến khi xử lý xong.

Các khái niệm quan trọng

  • Producer: bên gửi message (ví dụ, web server).
  • Consumer: bên xử lý message (ví dụ, worker).
  • Queue: nơi chứa các message.
  • Exchange: bộ phận định tuyến message đến đúng queue.
  • Binding: quy tắc kết nối giữa Exchange và Queue.
  • Routing Key: giống như “địa chỉ” gắn vào message để định tuyến.

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

  1. Producer gửi một message đến một Exchange.
  2. Exchange nhìn vào routing key + binding để biết nên chuyển message vào queue nào.
  3. Consumer lắng nghe queue, lấy message về xử lý.

Ví dụ đơn giản bằng Node.js

Cài đặt:

npm install amqplib

Producer (send.js):

const amqp = require('amqplib'); async function send() { const conn = await amqp.connect('amqp://localhost'); const ch = await conn.createChannel(); const q = 'task_queue'; await ch.assertQueue(q, { durable: true }); ch.sendToQueue(q, Buffer.from('Hello RabbitMQ!'), { persistent: true }); console.log('Message sent'); setTimeout(() => conn.close(), 500);
} send();

Consumer (worker.js):

const amqp = require('amqplib'); async function receive() { const conn = await amqp.connect('amqp://localhost'); const ch = await conn.createChannel(); const q = 'task_queue'; await ch.assertQueue(q, { durable: true }); ch.prefetch(1); ch.consume(q, msg => { const content = msg.content.toString(); console.log('Received:', content); setTimeout(() => { ch.ack(msg); console.log('Done processing'); }, 1000); });
} receive();

Khi nào nên dùng RabbitMQ?

  • Hệ thống có các tác vụ async (email, thông báo, xử lý ảnh…).
  • Bạn muốn tách service và xử lý song song.
  • App cần scale theo chiều ngang.
  • Bạn làm microservices hoặc muốn "chia để trị".

So sánh RabbitMQ với các hệ thống queue khác

Hệ thống Loại Ưu điểm Dùng khi
RabbitMQ Message Broker Routing phức tạp, độ ổn định cao App phức tạp, nhiều loại message
Redis Queue In-memory Queue Nhanh, đơn giản, dễ dùng Job nhỏ, không cần guarantee cao
Kafka Streaming platform Dữ liệu lớn, cần lưu trữ lâu dài Data pipeline, log processing

Kết luận

RabbitMQ là công cụ mạnh mẽ và đáng tin cậy để quản lý các tác vụ bất đồng bộ trong hệ thống. Nếu bạn đang làm một ứng dụng có nhu cầu xử lý phức tạp, scale dễ dàng, và muốn kiểm soát tốt luồng dữ liệu, thì RabbitMQ là thứ bạn nên tìm hiểu sớm.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Message broker là gì? Sơ lược về RabbitMQ và ứng dụng demo

Trong kiến trúc cloud (hay microservices), các ứng dụng được chia thành những khối độc lập nhỏ hơn để có thể dễ dàng develop, deploy và maintain. Hãy thử tưởng tượng bạn có một kiến trúc cloud có nhiề

0 0 67

- vừa được xem lúc

Serving ML Models in Production with FastAPI and Celery

Overview. Bạn đang không biết triển khai mô hình Machine Learning của bạn cho dự án thực tế bạn đang làm thì đọc bài này là đúng rồi đó (đùa thui).

0 0 47

- vừa được xem lúc

Smallrye Reactive Messaging RabbitMQ với Quarkus

Mở đầu. RabbitMQ không còn là chủ đề mới lạ với anh em lập trình, tuy nhiên trong bài biết này mình giới thiệu tới mọi người kết nối tới RabbitMQ bằng smallrye trong Quarkus.

0 0 62

- vừa được xem lúc

[System design] - Redis vs Kafka vs RabbitMQ

Khi sử dụng giao tiếp không đồng bộ trong hệ thống microservice, phổ biến nhất đó là chúng ta sẽ sử dụng một message broker. Message broker đảm bảo giao tiếp giữa các microservice một cách đáng tin cậ

0 0 60

- vừa được xem lúc

Xây dựng RabbitMQ sử dụng Docker và Nodejs

RabbitMQ là gì. Đây là kiến trúc cơ bản của một message queue:. . Producer : là ứng dụng client, tạo message và publish tới broker.

0 0 39

- vừa được xem lúc

Tìm hiểu về RabbitMQ

1. Khái niệm.

0 0 33