Bắt đầu với RabbitMQ cơ bản (P1)
9 thg 10, 2023
Hiểu cơ bản RabbitMQ
Khái niệm RabbitMQ được giải thích như sau:
RabbitMQ là một message broker ( message-oriented middleware) sử dụng giao thức AMQP(Advanced Message Queue Protocol — Giao thức giao nhận tin nhắn sử dụng hàng đợi). Đây là chương trình đóng vai trò trung gian lưu trữ cũng như điều phối các yêu cầu (message) giữa người nhận(consumer) và người gửi(producer).
… khá dài và rắc rối với những ai chưa từng làm việc hoặc nghe tới RabbitMQ (hoặc message-queue). Thế nên mình sẽ đơn giản hóa bằng ví dụ thực tiễn, đồng thời cũng có một đoạn thực hành ở phía dưới luôn. Để có thể hiểu rõ về RabbitMQ, bạn cũng cần có chút kiến thức về RESTful API và cách request/response trong web/app hoạt động nhé!
1. Consumer, Producer, Queues và Message
Hãy xem xét bài toán giả sử sau: Bạn và người yêu muốn gửi 1 bức thư cho nhau, thì bước đầu tiên tất nhiên bạn phải viêt thư và ra bưu điện gửi rồi. Sau khi tiếp nhận thư của bạn thì bưu điện sẽ tới tận nhà người yêu bạn gửi. Nếu theo đúng kịch bản, mọi thứ đều bình thường ổn định thì bức thư sẽ được gửi tới người yêu bạn ngay. Nhưng chẳng may thiên tai động đất sóng thân :v thì bức thư vẫn sẽ nằm ở thư viện, đợi cho tới khi người yêu bạn ổn định lại có thể đưa thư tới ngay.
Với ví dụ trên, bạn có thể hiểu cơ chế hoạt động cơ bản của RabbitMQ như sau:
- Producer: Bạn (gửi thư) - Service gửi message
- Consumer: Người yêu bạn (nhận thư) - Service nhận message
- Queues (hay Broker): Bưu điện (nơi lưu trữ và chuyển thư đi) - RabbitMQ
- Message: Lá thư bạn muốn gửi - Message data
Khi bạn và người yêu muốn gửi thư cho nhau (giao tiếp giữa 2 service với nhau), thì bạn sẽ viết thư (gửi đi 1 request). Sau khi bạn gửi bức thư, bưu điện sẽ tiếp nhận nó (cho message vào queue). Nếu người yêu bạn sẵn sàng nhận thư, bưu điện sẽ gửi ngay (consumer lấy data từ queue về, hoàn tất việc giao tiếp giữa 2 service). Còn nếu không chẳng may người yêu bạn không có nhà (tức service nhận đang sập, lỗi hoặc hỏng) thì bức thư (message) vẫn ở đó tới khi bạn gái bạn nhận được.