Rabbitmq là gì? Những tính năng và cách thức hoạt động của Rabbitmq
RabbitMQ là message broker – chương trình trung chuyển tin nhắn nguồn mở được triển khai rộng rãi nhất hiện nay. Với hơn 35.000 lượt cài đặt sử dụng RabbitMQ trên toàn thế giới tại các doanh nghiệp từ nhỏ tới lớn, RabbitMQ được đánh giá là message broker nguồn mở phổ biến nhất.
RabbitMQ có dung lượng nhẹ và dễ triển khai cả trên môi trường cố định (on premise) và trên các đám mây. RabbitMQ hỗ trợ nhiều giao thức messaging. RabbitMQ có thể được triển khai trong các cấu hình phân tán và liên kết để đáp ứng các yêu cầu về tính sẵn sàng, tính mở rộng cao. CùngBizfly Cloud tìm hiểu những thông tin chi tiết về RabbitMQ ngay tại bài viết này nhé.
Tìm hiểu về Rabbitmq
Messaging cho phép các phần mềm ứng dụng kết nối và mở rộng. Các ứng dụng có thể kết nối với nhau, trong vai trò là các thành phần của một ứng dụng lớn hơn, hoặc kết nối với các thiết bị và dữ liệu của người dùng. Messaging thường không đồng bộ, nó thực hiện phân tách các ứng dụng bằng cách tách riêng thao tác gửi và thao tác nhận dữ liệu.
RabbitMQ là một chương trình trung chuyển messaging - message broker
Điều này có thể khiến bạn nghĩ đến phân phối dữ liệu, các hoạt động non-blocking hoặc push notifications. Hoặc bạn cũng có thể muốn sử dụng quy trình xuất bản/đăng ký không đồng bộ hay tác vụ queue. Tất cả các thành phần này đều là các pattern và chúng hình thành một phần của messaging.
RabbitMQ là một chương trình trung chuyển messaging - message broker, cung cấp cho các ứng dụng của bạn một nền tảng chung để gửi và nhận tin nhắn, tin nhắn của bạn sẽ có một vị trí an toàn, nơi bảo đảm sự tồn tại của tin nhắn cho tới khi tin nhắn được nhận.
Các tính năng nổi bật của RabbitMQ
Độ tin cậy
RabbitMQ hỗ trợ nhiều tính năng khác nhau cho phép bạn giao dịch các tác vụ một cách tin cậy, với thời gian lưu lâu hơn, xác nhận giao hàng, xác nhận của nhà xuất bản và tính khả dụng cao.
RabbitMQ hỗ trợ nhiều tính năng khác nhau cho phép bạn giao dịch các tác vụ một cách tin cậy
Routing linh hoạt
Tin nhắn sẽ được route thông qua trao đổi trước khi chuyển đến queue. RabbitMQ cung cấp một số loại trao đổi được tích hợp sẵn cho định tuyến logic điển hình. Với các định tuyến phức tạp hơn, bạn có thể liên kết các trao đổi với nhau hoặc thậm chí có thể viết các kiểu trao đổi của riêng bạn như một plugin.
Clustering/cụm
Một số máy chủ RabbitMQ trên mạng cục bộ có thể được nhóm lại với nhau, hợp thành một nhà trung gian duy nhất.
Liên kết
Đối với các server cần các kết nối không quá chặt chẽ và có độ tin cậy cao so với clustering cho phép, RabbitMQ cung cấp một mô hình liên kết phù hợp với yêu cầu này.
Queue có tính sẵn sàng cao
Queue có thể được nhân bản trên một số máy trong một cluster, đảm bảo cho tin nhắn của bạn luôn an toàn ngay cả khi xảy ra tình huống lỗi phần cứng.
Đa giao thức
RabbitMQ hỗ trợ messaging thông qua nhiều giao thức messaging khác nhau.
Đa dạng ứng dụng
Các ứng dụng RabbitMQ hiện đã được phát triển với hệ ngôn ngữ phong phú bao gồm hầu hết mọi ngôn ngữ bạn có thể nghĩ đến.
Giao diện quản lý
RabbitMQ có giao diện quản lý sử dụng dễ dàng, cho phép bạn theo dõi và kiểm soát mọi vấn đề trong chương trình messaging trung gian.
Tracing/Truy vết
Nếu hệ thống messaging của bạn hoạt động không đúng, RabbitMQ sẽ hỗ trợ các thao tác truy vết để giúp bạn hiểu được hệ thống đang hoạt động như thế nào và vấn đề nào đang phát sinh.
Hệ thống plugin
RabbitMQ hỗ trợ một loạt các phần mở rộng của plugin dưới nhiều hình thức khác nhau hoặc bạn cũng có thể tự viết các tiện ích mở rộng này.
Ngoài ra còn có 1 số tính năng nổi bật bổ trợ như:
Hỗ trợ bán hàng
Hỗ trợ bán hàng với các chương trình đào tạo và tư vấn được cung cấp trên Pivotal.
Cộng đồng lớn mạnh
RabbitMQ có một cộng đồng người dùng lớn mạnh cung cấp tất cả các thành phần như ứng dụng, plugin, hướng dẫn, vv… Bạn có thể đăng ký để tham gia công đồng này.
Một số khái niệm trong Rabbitmq
- Producer: Ứng dụng gửi message.
- Consumer: Ứng dụng nhận message.
- Queue: Bộ đệm lưu trữ message.
- Message: Thông tin được gửi từ Producer đến Consumer thông qua RabbitMQ.
- Connection: là kết nối TCP giữa ứng dụng của bạn và RabbitMQ broker.
- Channel: là một kết nối ảo bên trong một connection. Khi bạn đang xuất bản hoặc sử dụng thông báo từ một queue - tất cả đều được thực hiện trên một channel.
- Exchange: Nhận message từ Producer và đẩy chúng vào queue (hàng đợi) tùy thuộc vào các quy tắc được xác định bởi loại exchange. Để nhận message, một hàng đợi cần phải được ràng buộc với ít nhất một exchange.
- Binding: là liên kết giữa queue và exchange.
- Routing key: là một key mà exchange xem xét để quyết định cách định tuyến message đến hàng đợi queue. Routing key giống như một địa chỉ cho message.
- AMQP: Advanced Message Queuing Protocol là giao thức được RabbitMQ sử dụng để nhắn tin.
- User: Có thể kết nối với RabbitMQ bằng tên người dùng và mật khẩu đã cho. Mọi người dùng đều có thể được chỉ định các quyền như quyền đọc, ghi và cấu hình các đặc quyền trong phiên bản.
Cách thức hoạt động của Rabbitmq
Producer gửi một message đến broker -> consumer nhận được message từ broker. RabbitMQ hoạt động như một phần mềm trung gian giao tiếp giữa cả producer và consumer ngay cả khi chúng chạy trên các máy khác nhau.
Trong khi producer đang gửi một message đến queue (hàng đợi), nó sẽ không được gửi trực tiếp mà được gửi bằng exchange thay thế. Hình ảnh dưới đây cho thấy ba thành phần chính được kết nối với nhau như thế nào:
Các exchange chịu trách nhiệm định tuyến các message đến các hàng đợi khác nhau. Vì vậy, message có thể được nhận từ producer đến exchange và sau đó lại được chuyển tiếp đến hàng đợi. Đây được gọi là phương pháp 'Publishing'.
Gửi message đến nhiều hàng đợi
Khi có một ứng dụng phức tạp hơn, chúng ta sẽ có nhiều hàng đợi. Vì vậy, các message sẽ gửi nó trong nhiều hàng đợi.
Việc gửi message đến exchange nhiều hàng đợi được kết nối với hàng đợi bằng binding và routing key. Binding là một “liên kết” (link) mà bạn thiết lập để kết nối hàng đợi với một exchange. Exchange có thể xem xét key này khi quyết định cách định tuyến message đến hàng đợi (tùy thuộc vào loại exchange).
Exchange
Message không được xuất bản trực tiếp đến hàng đợi, thay vào đó, producer gửi message đến một exchange. Một exchange chịu trách nhiệm về việc định tuyến các message đến các hàng đợi khác nhau. Một exchange chấp nhận các message từ ứng dụng producer và định tuyến chúng đến các hàng đợi message với sự trợ giúp của các binding và routing key.
Luồng message trong RabbitMQ
- producer bản một message cho một exchange. Khi bạn tạo exchange, bạn phải chỉ định loại của nó.
- exchange nhận được message và bây giờ chịu trách nhiệm về việc định tuyến message. Exchange lấy các thuộc tính message khác nhau, chẳng hạn như routing key, tùy thuộc vào loại exchange.
- Bindings phải được tạo từ exchange đến queue (hàng đợi). Trong ví dụ trên, có hai blindings với hai queue khác nhau từ exchange. Exchange định tuyến message vào queue tùy thuộc vào thuộc tính message.
- Các message vẫn ở trong queue cho đến khi chúng được xử lý bởi consumer
- Consumer xử lý message.
Để hiểu rõ hơn về cách thức hoạt động của RabbitMQ, chúng ta hãy xem hình bên dưới minh họa luồng message của RabbitMQ:
- User gửi yêu cầu tạo PDF tới ứng dụng web.
- Ứng dụng web (producer) gửi một message đến RabbitMQ bao gồm dữ liệu từ yêu cầu như tên và email.
- Một exchange chấp nhận các message từ producer và định tuyến chúng để sửa các message queue để tạo PDF.
- Worker xử lý PDF (consumer) nhận được thông báo nhiệm vụ và bắt đầu xử lý PDF.
Ứng dụng của Rabbitmq
RabbitMQ có thể được sử dụng khi máy chủ web cần nhanh chóng phản hồi các yêu cầu. Điều này giúp loại bỏ sự cần thiết phải thực hiện các hoạt động sử dụng nhiều tài nguyên trong khi người dùng chờ đợi kết quả. RabbitMQ cũng được sử dụng để truyền tải message đến nhiều người nhận khác nhau để xử lý hoặc chia sẻ tải giữa các worker chịu tải cao (20K+ tin nhắn/giây).
RabbitMQ có thể được sử dụng cho:
- Các ứng dụng cần hỗ trợ các giao thức cũ, chẳng hạn như STOMP, MQTT, AMQP, 0-9-1.
- Kiểm soát chi tiết đối với tính nhất quán/tập hợp các đảm bảo trên cơ sở mỗi tin nhắn
- Định tuyến phức tạp đến consumer
- Các ứng dụng cần nhiều khả năng publish/subscribe, gửi yêu cầu/trả lời point-point (point-to-point request/reply messaging).
Theo Bizfly Cloud chia sẻ
>>> Tham khảo: Hướng dẫn mở rộng quy mô nhân lực với RabbitMQ trên Kubernetes
Bizfly Cloud là nhà cung cấp dịch vụ điện toán đám mây với chi phí thấp, được vận hành bởi VCCorp.
Bizfly Cloud là một trong 4 doanh nghiệp nòng cốt trong "Chiến dịch thúc đẩy chuyển đổi số bằng công nghệ điện toán đám mây Việt Nam" của Bộ TT&TT; đáp ứng đầy đủ toàn bộ tiêu chí, chỉ tiêu kỹ thuật của nền tảng điện toán đám mây phục vụ Chính phủ điện tử/chính quyền điện tử.
Độc giả quan tâm đến các giải pháp của Bizfly Cloud có thể truy cập tại đây.
DÙNG THỬ MIỄN PHÍ và NHẬN ƯU ĐÃI 3 THÁNG tại: Manage.bizflycloud