Bạn đang xem: Message queue là gì
Khi client call REST API request để thực hiện một Order. Order service nhận request xử lý business logic rồi gọi tới Payment Service qua API để thực hiện Payment.
Mô hình trên là loại mô hình kết nối Point-To-Point, các service kết nối trực tiếp với nhau thông qua API end-point. Tuy nhiên, mô hình này chỉ áp dụng với hệ thống có số lượng service nhỏ. Nếu số lượng service tăng, giao tiếp kiểu này sẽ trở nên rắc rối phức tạp, khó quản lý
Trong mô hình này, các Microservice không giao tiếp trực tiếp với nhau mà thông qua hệ thống Message Queue, giao tiếp bất đồng bộ
Order Microservice publish một message đến Message queue theo một topic nào đó. Payment Microservice và các Microservice sẽ subscribe các message theo một topic cụ thể. Ví dụ Payment Microservice subscribe message topic “ABC” thì chỉ khi Order Microservice gửi message ABC thì nó mới nhận.
Cơ chế này tương tự như cách bạn gửi thư từ A đến B. A sẽ không đem thư đến tận nơi cho B mà gửi qua bưu điện, ghi rõ địa chỉ người nhận. Bưu điện đóng vai trò như một Message Broker để phát thư đến người nhận theo địa chỉ đã cho.
Cách này tách biệt người gửi và người nhận, và người truyền tin trung gian sẽ lưu tin nhắn đến khi người nhận có thể xử lý.
Xem thêm: Existence Là Gì – Định Nghĩa, Ví Dụ, Giải Thích
Giao tiếp giữa người gửi/ người nhận được tạo ra bởi message broker qua các tiêu chuẩn truyền tin bất đồng bộ như AMQP, MQTT.
AMQP một giao thức internet mở và được chuẩn hóa để truyền message tin cậy giữa các ứng dụng hoặc tổ chức. AMQP giúp các chuyên gia CNTT xây dựng một hệ sinh thái tin nhắn đồng nhất, đa dạng, kết nối các hệ thống một cách tương tác và hợp tác.
Xem thêm: Tổ Hợp Căn Hộ Goldmark City, Chung Cư Goldmark City Quà Tặng 250 Triệu
Tổ chức – ứng dụng trong các tổ chức khác nhauCông nghệ – ứng dụng trên các nền tảng khác nhauThời gian: Hỗ trợ giao tiếp bất đồng bộKhông gian – hoạt động ở khoảng cách xa hoặc trên các mạng nghèo nàn
Vì những ưu thế của AMQP, nên nó đã được sử dụng trong Microservice để thực hiện communication giữa các service
Trong ví dụ này, mình sử dụng Service Broker là RabitMQ. Một message broker dùng nền tảng AMQP khá phổ biến.
Download bộ cài RabitMQ tại đây. RabitMQ hỗ trợ cả Windows, Linux. Bài này mình sử dụng môi trường Windows
Sau đó bạn có thể truy cập vào RabitMQ theo link sau http://localhost:15672/mgmt. Enter login guest/guest
Ở đây, mình sẽ implement 2 service. Một service đóng vai trò là producer để gửi message đến queue, service kia là consumer để nhận message này. Ngôn ngữ sử dụng là .Net core
Tạo 2 project console application .NET core tên là Producer và Consumer. Mình sử dụng package RabbitMQ.Client để giao tiếp với RabitMQ server
Durable: true (Queue vẫn tồn tại nếu nhưng RabitMQ khởi động lại)Exclusive: Được sử dụng bởi chỉ một connection và queue sẽ bị xóa khi connection đó kết thúcAuto-delete: Queue sẽ bị xóa nếu như consumer cuối cùng hủy subscribe Thực hiện publish message
Consumer subscribe message từ Producer, khi có message đến, Event Consumer_Received sẽ được call, extract data và thực hiện business logic tương ứng
Chạy chương trình , bạn sẽ thấy message từ Hello World được send từ Procedure đến Consumer thông qua RabitMQ
Trên đây là một demo đơn giản thể hiện việc communication giữa các Microservice với nhau thông qua Message Queue, dùng cơ chế bất đồng bộ. Thực tế, Microservice còn có nhiều hình thức communicate nữa như RPC, Rest API HTTP…
► 2021(2) ► 2020(45) ► 2019(46) ▼ 2018(66) ▼ tháng một(10) ► 2017(22) ► 2016(9)
Chuyên mục: Hỏi Đáp