-
Design Pattern
- Singleton Design Pattern
- Factory Design Pattern
- Factory Method Design Pattern
- Abstract Factory Design Pattern
- Builder Design Pattern
- Prototype Design Pattern
- Object Pool Design Pattern
- Chain of Responsibility Design Pattern
- Command Design Pattern
- Interpreter Design Pattern
- Iterator Design Pattern
- Mediator Design Pattern
- Memento Design Pattern
- Observer Design Pattern
- Observer Design Pattern - Xử Lý Exception
- Strategy Design Pattern
- Template Method Design Pattern
- Visitor Design Pattern
- Null Object Design Pattern
- Adapter Design Pattern
- Bridge Design Pattern
- Composite Design Pattern
- Decorator Design Pattern
- Flyweight Design Pattern
- Proxy Design Pattern
- S.O.L.I.D
- Clean code
- Lập trình socket
- Java Core
- Multi-Thread
- Spring
- Java Web
- Memory Caching
- Message Queue
- DevOps
- Xây dựng một nền tảng
- MongoDB
- MySQL timestamp
- Properties vs yaml
- Kotlin
- Lập Trình Machine Learning với PyTorch
- Mã Nguồn Mở
- Ezy HTTP
- Free Chat
- Một số kinh nghiệm với Git
- Review cho đồng nghiệp!
- Setup Dev Environment
- Hello World
- Create a Server Project
- Handle Client Requests
- Using ezyfox-server-csharp-client
- Using ezyfox-es6-client
- Client React.js Interaction
- Build And Deploy In Local

Giới thiệu
Ra đời từ 2007 và hiện nay đang được tiếp tục phát triển bởi Pivotal Software, cho đến nay thì #RabbitMQ vẫn đang chiếm được cảm tình rất lớn từ các nhà phát triển trên toàn cầu
Với tư tưởng và mục tiêu kết nối các thành phần trong hệ thống với nhau như ở bài #MQ trước mình đã nói thì RabbitMQ cũng vậy, nó cung cấp một số thứ như sau:
- RabbitMQ broker: được viết bằng ngôn ngữ #erlang, có nhiệm vụ quản lý queue và điều phối việc gửi nhận message, cá nhân mình không sử dụng erlang và cũng chưa bao giờ thử code erlang, mặc dù nghe nói erlang có khả năng quản lý version gì gì đó nhưng cuối cùng thì nâng cấp phiên bản của RabbitMQ thì mình vẫn phải dùng #rollingupdate tức là phẩn phải khởi động lại service, mà lúc đi cài ông RabbitMQ này cũng tương đối khó, cứ phải là tương thích phiên bản #erlang mới chịu cơ, trong khi đó #erlang lại không được sử dụng rộng rãi, nên đây cũng là một điểm trừ của #RabbitMQ
- Các thư viện client: hiện nay thì đã có đầy đủ các thư viện client cho các ngôn ngữ #Java, #CSharp, #Python, #C, #C++ ... Các thư viện này đa phần chỉ hỗ trợ gửi nhận dữ liệu dạng byte[] nên chúng ta sẽ cần phải viết hoặc sử dụng các thư viện khác để #map bytes thành các đối tượng tương ứng
Các thành phần
Một số thành phần của RabbitMQ bao gồm:
- vhost: Bạn có thể hiểu là RabbitMQ có thể nhiều dự án, mỗi dự án có thể là một vhost
- exchange: Gọi là #exchange nghe cho nó sang trọng chứ thực ra nó là một đối tượng để quản lý các #queue, mỗi một queue sẽ được map bởi một routing key (#RoutingKey), nếu viết bằng Java thì nó kiểu này:
class Exchange {
private final Map<String, Queue> queueByRoutingKey = new ConcurrentHashMap<>();
}
- Routing key: Là key mà Exchange dùng để map với Queue
- Queue: Là nơi lưu trữ dữ liệu thiêu kiểu First In First Out (#FIFO), các #Publisher sẽ đưa dữ liệu vào Queue và các #Consumer sẽ lấy dữ liệu từ queue này ra, tuy nhiên có thể Consumer sẽ phải gửi lại #ack cho RabbitMQ #Broker thì dữ liệu mới thực sự được lấy ra khỏi queue
Kết luận
Với mục tiêu xây dựng một service trung gian chuyên điều phối và quản lý message thì RabbitMQ nhìn chung khá đơn giản, cái khó là việc chúng ta cài đặt thế nào và serialize/deserialize dữ liệu ra sao mà thôi. Nhưng với sự hỗ trợ rất mạnh mẽ từ những thư viện MessagePack hay Protobuf, mọi chuyện lại tương đối dễ dàng
Tham khảo
Tham khảo:
-
Design Pattern
- Singleton Design Pattern
- Factory Design Pattern
- Factory Method Design Pattern
- Abstract Factory Design Pattern
- Builder Design Pattern
- Prototype Design Pattern
- Object Pool Design Pattern
- Chain of Responsibility Design Pattern
- Command Design Pattern
- Interpreter Design Pattern
- Iterator Design Pattern
- Mediator Design Pattern
- Memento Design Pattern
- Observer Design Pattern
- Observer Design Pattern - Xử Lý Exception
- Strategy Design Pattern
- Template Method Design Pattern
- Visitor Design Pattern
- Null Object Design Pattern
- Adapter Design Pattern
- Bridge Design Pattern
- Composite Design Pattern
- Decorator Design Pattern
- Flyweight Design Pattern
- Proxy Design Pattern
- S.O.L.I.D
- Clean code
- Lập trình socket
- Java Core
- Multi-Thread
- Spring
- Java Web
- Memory Caching
- Message Queue
- DevOps
- Xây dựng một nền tảng
- MongoDB
- MySQL timestamp
- Properties vs yaml
- Kotlin
- Lập Trình Machine Learning với PyTorch
- Mã Nguồn Mở
- Ezy HTTP
- Free Chat
- Một số kinh nghiệm với Git
- Review cho đồng nghiệp!
- Setup Dev Environment
- Hello World
- Create a Server Project
- Handle Client Requests
- Using ezyfox-server-csharp-client
- Using ezyfox-es6-client
- Client React.js Interaction
- Build And Deploy In Local