Khi nào nên sử dụng Giao thức xếp hàng tin nhắn nâng cao như RabbitMQ? [đóng cửa]


45

Ai đó có thể giải thích cho tôi trong trường hợp sử dụng nào tôi nên xem xét sử dụng AMQP như ví dụ RabbitMQ không? Những ưu và khuyết điểm là gì?


Có một số câu trả lời hay cho một câu hỏi tương tự trên Stack Overflow: Sử dụng hàng đợi JMS / tin nhắn trong thế giới thực?
Gan

Bạn có thể xem liên kết dưới đây. Nó có một mô tả rộng: stackoverflow.com/a/51377756/3073945
Md. Sajedul Karim

Câu trả lời:


25

Hãy tưởng tượng rằng bạn có một dịch vụ web có thể chấp nhận nhiều yêu cầu mỗi giây. Bạn cũng có một hệ thống kế toán thực hiện rất nhiều thứ, một trong số đó là xử lý các yêu cầu đến từ dịch vụ web.

Nếu bạn đặt một hàng đợi giữa dịch vụ web và hệ thống kế toán, bạn sẽ có thể:

  • có ít khớp nối giữa hai ứng dụng, vì bây giờ cả hai ứng dụng phải biết các tham số cấu hình của hệ thống quản lý hàng đợi và tên của hàng đợi. Điều thú vị ở đây là bạn thường có khả năng chuyển sang một máy chủ khác một số ứng dụng hơn là di chuyển hệ thống quản lý hàng đợi
  • nếu bạn có rất nhiều yêu cầu đến trong một khoảng thời gian ngắn, hệ thống kế toán sẽ có thể xử lý tất cả chúng
  • tiếp tục một số yêu cầu nếu số lượng của họ thực sự lớn

Tất nhiên, bạn có thể có những tình huống phức tạp hơn trong đó số lượng ứng dụng của bạn lớn hơn hai và bạn cần quản lý giao tiếp giữa chúng.


1
1) Làm thế nào A được ghép với B tốt hơn A được ghép với C và C được ghép với B?
Charlie

2) Tại sao không đưa hàng đợi vào hệ thống kế toán? Tại sao lại giới thiệu một phần hộp đen di chuyển mới cần cấu hình bổ sung?
Charlie

2
@Charlie về câu hỏi 1, tôi đã sửa đổi câu trả lời của mình. Về câu hỏi 2, chính xác ý bạn là gì khi đưa hàng đợi vào hệ thống kế toán? Bạn muốn sử dụng một cấu trúc dữ liệu hàng đợi? Trong trường hợp đó, bạn sẽ có nhiều mã hơn để viết để duy trì nó. Bạn muốn mô phỏng hàng đợi bằng bảng cơ sở dữ liệu? Một lần nữa bạn sẽ phải viết một số mã tốt để quản lý bảng đó. Một cái gì đó khác mà tôi đã không nghĩ về?
Hồi giáo

Tôi sai chính tả cho 1. Nếu hàng đợi được đặt trong dịch vụ web hoặc hàng đợi được đặt trong ứng dụng, thì một khớp nối vẫn còn. Tuy nhiên, nếu hàng đợi là bên ngoài cho cả hai, thì bây giờ bạn có hai lần khớp nối và thêm 50% hệ thống để quản lý / điểm lỗi. Nếu hàng đợi của bên thứ ba được chọn, bạn cũng sẽ có gói mới này để tìm hiểu và định cấu hình và có thể sẽ bị đóng gói bởi vô số tính năng bạn không quan tâm đến việc sử dụng, các tính năng được thêm vào để làm cho mục đích chung của hàng đợi nhiều tình huống hơn của bạn.
Charlie

@Charlie, có lẽ là một nhà môi giới tin nhắn duy nhất sẽ được sử dụng giữa nhiều hệ thống. Hoặc sẽ có một proxy duy nhất cho người môi giới. (Trong trường hợp của chúng tôi, chúng tôi đang sử dụng một thiết bị Nhắn tin duy nhất có thể xử lý hàng triệu tin nhắn mỗi giây cho tất cả các hệ thống của chúng tôi). Điều này thực sự tạo ra sự tách rời lớn hơn bởi vì một thông điệp được tạo bởi một hệ thống và bất kỳ hệ thống quan tâm nào cũng có thể nhận được thông báo đó và thực hiện logic phù hợp. Các khớp nối duy nhất là hàng đợi chính nó.
Michael Brown

16

Ngoài việc cung cấp bộ đệm giữa dịch vụ web và dịch vụ phụ trợ khác, hàng đợi tin nhắn có thể được sử dụng cho các tình huống nâng cao hơn. Rabbit MQ (và các sản phẩm Hàng đợi Tin nhắn trưởng thành khác cũng được gọi là MOM - Phần mềm trung gian hướng thư) có thể được định cấu hình để định tuyến và phân phối thư theo các quy tắc khác nhau.

Ví dụ, kỹ thuật định tuyến Pub-Sub cho phép một nguồn duy nhất gửi tin nhắn và có nhiều người nghe nhận được nó. Điều này thường được sử dụng bởi phần mềm giao dịch chứng khoán để cập nhật cho người dùng trên sàn.

Ngoài ra, do thực tế là hầu hết các MOM đều có sdks cho nhiều ngôn ngữ và nền tảng, chúng có thể được sử dụng để tích hợp các ứng dụng được viết trên các nền tảng khác nhau.

Đây chỉ là một vài trong số các kịch bản được kích hoạt bởi các MOM.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.