Ứng dụng RabbitMQ vào hệ thống lớn như thế nào?

Đơn giản là RabbitMQ là nơi trung chuyển sẽ nhận message từ các app khác nhau (Nhưng model của message và consumer mới được định nghĩa giống nhau thì consumer mới nhận được message)

Thien Tech

RabbitMQ là gì - thientech

Chào anh em trong group, hôm nay mình sẽ bàn về chủ đề nâng cao 1 tí , anh em chưa hiểu định nghĩa nào có thể xem các link khái niệm mình có đính kèm phía dưới

Khái niệm cơ bản:
RabbitMQ là một message broker ( message-oriented middleware) sử dụng giao thức AMQP - Advanced Message Queue Protocol.
Đơn giản là RabbitMQ là nơi trung chuyển sẽ nhận message từ các app khác nhau (Nhưng model của message và consumer mới được định nghĩa giống nhau thì consumer
mới nhận được message) trong hệ thống, lưu trữ message an toàn và đưa đến đích chính xác. Việc đưa message vào hàng đợi là một giải pháp hay khi ta muốn phân tán message cho nhiều người nhận giúp giảm tải cho các worker xử lý.


RabbitMQ có 3 thành phần chính:
Producer: Ứng dụng gửi message vào Queue.
Queue : Là một hộp chứa message
Consumer : Ứng dụng chờ nhận message từ queue

   Producer ==> Queue  ==> Consumer

Có thể hiểu như sau: Message sẽ được nhiều Producer đẩy vào Queue sau đó có nhiều consumer đọc message từ queue ra để xử lý. Anh em có thể đọc thêm của bác tôi đi code dạo bác định nghĩa khá kĩ về khái niệm này:
https://toidicodedao.com/2019/10/08/message-queue-la-gi-ung-dung-microservice/

Ngôn ngữ hỗ trợ: Python,Java,Ruby,PHP,C#,JavaScript,Go,Elixir,Objective-C,Swift,SpringAMQP
Mình lấy thực tế:
Quay về bài viết trước elasticsearch,  giải quyết việc đưa database lên elasticsearch là sau khi 1 order vào hệ thống mình thực hiện insert xuống database, nếu database ok thì mình đồng bộ item order đó vào elasticsearch, mình sẽ thiết kế ra 1 cái Queue và app consumer gọi message từ queue ra xử lý.

Khoảng 40% hệ thống sử dụng RabbitMQ để làm việc cho công tác hậu cần  

--> Điều đó cho thấy tầm quan trọng của RabbitMQ như thế nào. Đặc tính của rabbitmq là asynchronous(Không đồng bộ). Tức là anh có thể push vào Queue 100 hay 200 dữ liệu. Sau đó consumer nó sẽ đọc ra từ từ để xử lý từng message.

Thư viện tích hơp .NET, .NET CORE:
- RabbitMQ.Client (trang chủ của rabitMQ )hoặc MassTransit thư viện này khá hay để tích hợp RabitMQ

Ứng dụng:
Dựa vào đặc tính này mà chúng ta có thể ứng dụng vào các chức năng chạy nền phía dưới hệ thống:
Nếu message đó muốn xử lý bất đồng bộ với số lượng lớn thì dùng RabbitMQ để hứng sau đó đầu consumer đọc từ từ ra để xử lý.
-> Hệ thống hứng trạng thái từ các đối tác
-> Đồng bộ hệ thống đơn hàng vào elasticsearch. Như bài trước mình có đề cập việc dùng elasticsearch để tối ưu hệ thống tìm kiếm và export trên hệ thống lớn
-> Đặc tính này có thể được tận dụng để xây dựng các hệ thống lưu trữ và xử lý log logic hệ thống.


Hệ thống dùng có thể là nlog (mình dùng ở .NETCore) và log4net(trước mình dùng ở .NET)
-> Các lệnh gửi mail cho khách hàng vài chục ngàn mail/ngày --> Mỗi lần hệ thống lấy 1000 email ra để đẩy vào queue và gửi từ từ đi
-> Hệ thống notification --> Gửi mail hàng loạt cho khách hàng thông báo truy thu đơn hàng mỗi lần gửi 10.000 email để gửi
thì mỗi lần gửi 100 đơn hoặc 200 đơn (Quy trình như sau: Sẽ có 1 con job đúng giờ 2h đêm hằng ngày hệ job này sẽ tự động gửi mail
cho khách hàng, mỗi lần job chạy sẽ lấy 100 email của shop từ database sau đó push vào queue để consumer nó sẽ đọc từ từ ra gửi mail cho khách hàng)
Link trang chủ: https://www.rabbitmq.com/getstarted.html
Link: https://viblo.asia/p/message-broker-la-gi-so-luoc-ve-rabbitmq-va-ung-dung-demo-djeZ1PVJKWz
Link docker: https://hub.docker.com/_/rabbitmq
Link tham khảo: https://kipalog.com/posts/Tim-hieu-RabbitMQ---Phan-1
Link : https://viblo.asia/p/message-broker-la-gi-so-luoc-ve-rabbitmq-va-ung-dung-demo-djeZ1PVJKWz
 

Related Posts