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. Vậy chúng ta có câu hỏi, message broker là gì?
Message broker là được thiết kế để validating, transforming và routing messages. Chúng phục vụ các nhu cầu giao tiếp giữa các ứng dụng với nhau.
Với Message broker, ứng dụng nguồn (producer) gửi một message đến một server process mà nó có thể cung cấp việc sắp xếp dữ liệu, routing, message translation, persistence và delivery tất cả điểm đến thích hợp(consumer).
Có 2 hình thức giao tiếp cơ bản với một Message Broker:
- Publish và Subscribe (Topcs)
- Point-to-Point (Queues)
Ví dụ về RabbitMQ
Ta lấy ví dụ tạo một file và tải về của một trang web mà hàng trăm hàng nghìn user sẽ click vào nút đó, lúc này server sẽ nhận rất nhiều request cùng lúc gây ra chậm, quá tải hoặc nghẽn quá trình tạo file và tải về... Lúc này ta cần đến RabbitMQ để đẩy các request này vào hàng chờ với cơ chế: Một consumer lấy message từ hàng đợi và bắt đầu xử lý file trong lúc một producer đang đẩy thêm những message mới vào hàng đợi. Một request có thể được tạo bằng ngôn ngữ này và xử lý bằng một ngôn ngữ khác. Do đó hai client gửi và nhận sẽ có độ ràng buộc thấp.
Cơ bản về RabbitMQ với Golang và Docker
Cài đặt: Các bạn có thể lên trang rabbitmq.com để thêm thông tin cài đặt nhé, ở đây mình sẽ sử dụng qua docker với ubuntu cho tiện hehe:
docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.10-management
Thế này là RabbitMQ đã chạy thành công rồi nha, tiếp theo chúng ta sẽ demo cách thức hoạt động nhé: Chúng ta sẽ có 3 thứ cần lưu ý ở đây: Ta có P nghĩa là Producer có trách nhiệm gửi message. C là một consumer sử dụng để đợi nhận message. Chúng ta có gửi và nhận message thì cuối cùng ta có Queue sẽ là nơi lưu trữ các mesage bên trong, nhiều Producer có thể gửi messages vào 1 queue và cũng nhiều consumers có thể nhận messages từ 1 queue đó. Chúng ta sẽ bắt đầu với basic của RabbitMQ nhé.
go get github.com/streadway/amqp
Ta cài thư việt amqp sau đó tạo một cấu trúc file như sau: Sau đó chúng ta sẽ tạo ra một helper func để kiểm tra giá trị mà amql gọi về trong send.go
func failOnError(err error, msg string) { if err != nil { log.Fatalf("%s: %s", msg, err) }
}
Tiếp đến ta connect đến RabbitMQ qua port 5672 và tạo 1 channel để chứa API khi hoàn thành: Ta khởi tạo một Queue và Publish để send message đi nhe: Đến với receive/receive.go ta vẫn có failOnError để kiểm trả value trả về, connect và tạo ra channel để chứa API hoàn thành: Phần dưới: Ta yêu cầu server gửi một tin nhắn từ Queue. Vì nó push những message asynchronously( bất đồng bộ) cho nên ta sẽ đọc tin nhắn từ channel ( return amqp::Consume) trong goroutine.
Cuối cùng sau khi hoàn thành 2 file ta chạy lệnh ở 2 file cùng kết quả ta nhận được: Các thông tin kết nối từ RabbitMQ server:
Tóm lại
Mình đã tóm tắt lại các thông tin cũng như cách thức hoạt động cơ bản về RabbitMQ. Tuy nhiên vẫn sẽ còn những điều khó hiểu ở đây, mình sẽ đi sâu hơn để các bạn có thể thấy rõ ứng dụng của RabbitMQ trong blog sau nhé. Hy vọng bài viết sẽ giúp ích các bạn, have a nice day .
Bài viết đã tham khảo: