Message Broker là gì?
Message Broker là một thành phần trung gian trung chuyển message từ thành phần gửi đến thành phần nhận
RabbitMQ là gì?
RabbitMQ là một message broker 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 bản tin giữa thành phần nhận và thành phần gửi.
Ngoài giao thức AMQP, RabbitMQ cũng hỗ trợ các giao thức khác như Streaming Text Oriented Messaging Protocol (STOMP), Message Queuing Telemetry Transport (MQTT), ... thông qua việc cài đặt các plugins
Các khái niệm và thành phần trong RabbitMQ
ProducerThành phần thực hiện quá trình gửi bản tin lên RabbitMQ
Consumer
Thành phần thực hiện việc lấy các bản tin từ queue về
Exchange
Nhận message từ producer và đẩy chúng đến hàng đợi dựa trên những nguyên tắc của từng loại exchange hiện tại
Direct Exchange
Bản tin được đưa từ Exchange tới Queue với binding key và routing key trùng nhau
Trong Direct Exchange có một loại đặc biệt với tên là một chuỗi string trống gọi là Default Exchange. Default Exchange được liên kết ngầm định với mọi Queue với khóa định tuyến bằng với tên QueueFanout Exchange
Chuyển bản tin đến toàn bộ các queue được bind với exchange không phụ thuộc vào routing key
Topic Exchange
Một Topic Exchange sẽ sử dụng wildcard để gắn routing key với một routing pattern khai báo trong binding. Consumer có thể đăng ký những topic mà nó quan tâm
Header Exchange
Khá giống với Topic Exchange nhưng các bản tin được định tuyến đến các queue thông qua các header
Dead Letter Exchange
Nếu không tìm thấy hàng đợi phù hợp cho tin nhắn, tin nhắn sẽ tự động bị hủy. RabbitMQ cung cấp một tiện ích mở rộng AMQP được gọi là "Dead Letter Exchange" — Cung cấp chức năng để chụp các tin nhắn không thể gửi được.
Queue
Thành phần lưu trữ bản tin được gửi lên. Để nhận về message, một queue phải gắn với một exchange nào đó
Binding
Là một cấu hình ràng buộc kết nối giữa hàng đợi và exchange
Connection
Là một kết nối TCP giữa ứng dụng và RabbitMQ
Channel
Một channel là một kết nối ảo bên trong một connection. Khi bạn đẩy đi hoặc nhận các message từ hàng đợi, tất cả phải đi qua channel
Routing Key
Là một khóa mà exchange dùng để tìm xem và ra quyết cách định tuyến message đến hàng đợi. Có thể hiểu như là một địa chỉ của message.
Virtual Host
Cung cấp chức năng tách ứng dụng dùng trên cùng RabbitMQ. Người dùng khác nhau có quyền hạn khác nhau trên virtual host, hàng đợi hay exchange khác nhau. Chúng chỉ tồn tại trong một virtual host.
User
Người dùng có thể kết nối đến RabbitMQ bằng username/password. Mỗi người dùng được cấp quyền như đọc, ghi và cấu hình quyền bên trong một instance. User còn có quyền trên một host ảo.
Cài đặt
Self Hosted
https://www.rabbitmq.com/install-windows.html
https://www.rabbitmq.com/install-windows-manual.html
https://www.rabbitmq.com/install-debian.html
Cloud
Thư viện C#
https://www.nuget.org/packages/RabbitMQ.Client
https://github.com/rabbitmq/rabbitmq-dotnet-client
Dựa trên RabbitMQ.Client
https://github.com/pardahlman/RawRabbit
https://github.com/EasyNetQ/EasyNetQ
Hỗ trợ việc kết nối tới RabbitMQ ổn định thông qua các cơ chế retry
https://github.com/App-vNext/Polly
Message Queue / Service Bus
https://www.nuget.org/packages/NServiceBus
https://docs.particular.net/nservicebus
https://www.nuget.org/packages/DotNetCore.CAP
https://github.com/dotnetcore/CAP
https://www.nuget.org/packages/MassTransit
https://github.com/MassTransit/MassTransit
https://www.nuget.org/packages/Rebus
https://github.com/rebus-org/Rebus
Tham khảo thêm
https://gpcoder.com/6828-gioi-thieu-rabbitmq
https://www.cloudamqp.com/blog/2015-05-18-part1-rabbitmq-for-beginners-what-is-rabbitmq.html
https://www.cloudamqp.com/blog/2015-05-27-part3-rabbitmq-for-beginners_the-management-interface.html
Tiếp tục cập nhật ...