Một số ghi chú về RabbitMQ

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

Producer

Thà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 Queue

Fanout 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

Một Routing Key trong Topic Exchange phải bao gồm 0 hoặc nhiều từ phân cách bởi dấu chấm (.)
Các wildcard được sử dụng là:
* : Chính xác một từ được phép.
# : 0 hoặc nhiều số từ được phép.
. : Dấu phân cách từ. Nhiều từ chính được phân tách bằng dấu phân cách dấu chấ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

https://www.cloudamqp.com

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

https://www.cloudamqp.com/blog/2015-09-03-part4-rabbitmq-for-beginners-exchanges-routing-keys-bindings.html


Tiếp tục cập nhật ...