Chia sẻ kiến thức lập trình

RabbitMQ

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:

  1. 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
  2. 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:

  1. 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
  2. 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<>();
}
  1. Routing key: Là key mà Exchange dùng để map với Queue
  2. 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:

  1. wiki
  2. Tải xuống RabbitMQ
  3. Danh sách client
Share: