Message Queue và Message Bus - sự khác biệt là gì?


95

Và có cái nào không? Đối với tôi, MB biết cả người đăng ký và người đăng tải và hoạt động như một người trung gian, thông báo cho người đăng ký về các tin nhắn mới (một cách hiệu quả là một mô hình "đẩy"). MQ, mặt khác, là một mô hình "kéo", nơi người tiêu dùng kéo các thông điệp ra khỏi hàng đợi.

Tôi đã hoàn toàn đi chệch hướng ở đây?

Câu trả lời:


47

Nhìn chung, khi nói đến các sản phẩm phần mềm của nhà cung cấp, chúng được sử dụng thay thế cho nhau và không có sự phân biệt mạnh mẽ về mặt đẩy hoặc kéo như bạn mô tả.

Các BUS vs HÀNG ĐỢI thực sự là hơi một khái niệm di sản, gần đây nhất bắt nguồn từ hệ thống như IBM MQ và Tibco Rendezvous. MQ ban đầu là một hệ thống 1: 1, thực sự là một hàng đợi để tách các hệ thống khác nhau.

Ngược lại, Tibco được (được bán như một) xương sống nhắn tin, nơi bạn có thể có nhiều nhà xuất bản và người đăng ký về cùng một chủ đề.

Tuy nhiên, cả hai (và các sản phẩm cạnh tranh mới hơn) có thể chơi trong không gian của nhau ngày nay. Cả hai đều có thể được đặt để làm gián đoạn cũng như thăm dò ý kiến ​​cho các tin nhắn mới. Cả hai đều làm trung gian cho các tương tác giữa các hệ thống khác nhau.

Tuy nhiên , cụm từ hàng đợi thông điệp cũng được sử dụng cho các máy bơm thông điệp nội bộ nội bộ và tương tự, và trong ngữ cảnh này, cách sử dụng thực sự khác nhau. Nếu bạn nghĩ về máy bơm thông báo cổ điển của Windows, thì đây thực sự là mô hình kéo bạn mô tả, nhưng nó thực sự mang tính nội bộ hơn là liên ứng dụng hoặc liên hộp.


113

Xe buýt nhắn tin

Một Message Bus là một cơ sở hạ tầng thông điệp để cho phép các hệ thống khác nhau để giao tiếp thông qua một chia sẻ tập các giao diện ( xe buýt nhắn ).

nhập mô tả hình ảnh ở đây

Nguồn: EIP

Hàng đợi tin nhắn

Ý tưởng cơ bản về hàng đợi tin nhắn là một ý tưởng đơn giản:

  • Hai (hoặc nhiều) tiến trình có thể trao đổi thông tin thông qua quyền truy cập vào hàng đợi thông báo hệ thống chung .

  • Quá trình gửi đặt thông qua một số mô-đun truyền thông báo (OS) một thông báo vào hàng đợi mà quá trình khác có thể đọc được

Nguồn: Dave Marshall

nhập mô tả hình ảnh ở đây

Nguồn hình ảnh

Sự khác biệt

Hàng đợi Thông báo chứa quy tắc FIFO (xuất trước vào trước ) trong khi trong Xe buýt Thông báo thì không.

Phần kết luận

Cả hai đều NHÌN như thực hiện cùng một loại công việc - truyền thông điệp giữa hai Ứng dụng hoặc Mô-đun hoặc Giao diện hoặc Hệ thống hoặc Quy trình , ngoại trừ sự khác biệt nhỏ của FIFO


4
Không nhất thiết phải đúng, một số hàng đợi cho phép bạn bỏ qua tin nhắn. Mặc dù nói chung, đây là một cách thực sự tốt để phân biệt giữa hai loại.
Tom

22
Bạn thường thêm tín dụng khi bạn lấy văn bản và hình ảnh từ một nơi nào đó. Tôi đã thêm nguồn.
jgauffin

25

Đã có một số điểm mờ ranh giới giữa hai khái niệm này, vì một số sản phẩm hiện hỗ trợ các tính năng trước đây chỉ thuộc về một hoặc danh mục khác (ví dụ: Azure Service Bus hỗ trợ cả hai phương pháp).

XẾP HÀNG

Hàng đợi tin nhắn nhận tin nhắn từ một ứng dụng và cung cấp chúng cho một hoặc nhiều ứng dụng khác theo cách thức nhập trước - xuất trước (FIFO). Trong nhiều kịch bản kiến ​​trúc, nếu ứng dụng A cần gửi các bản cập nhật hoặc lệnh đến các ứng dụng B và C, thì các hàng đợi thông báo riêng biệt có thể được thiết lập cho B và C. A sẽ viết các thông báo riêng biệt vào mỗi hàng đợi và mỗi ứng dụng phụ thuộc sẽ đọc từ hàng đợi của riêng mình (thông báo bị xóa khi được xếp lại). Cả B và C đều không cần phải có mặt để A gửi thông tin cập nhật. Mỗi hàng đợi tin nhắn là liên tục, vì vậy nếu một ứng dụng khởi động lại, nó sẽ bắt đầu kéo từ hàng đợi của nó khi nó trực tuyến trở lại. Điều này giúp phá vỡ sự phụ thuộc giữa các hệ thống phụ thuộc và có thể cung cấp khả năng mở rộng và khả năng chịu lỗi cao hơn cho các ứng dụng.

XE BUÝT

Xe buýt tin nhắn hoặc xe buýt dịch vụ cung cấp một cách để một (hoặc nhiều) ứng dụng truyền thông điệp tới một hoặc nhiều ứng dụng khác. Có thể không có gì đảm bảo về việc đặt hàng trước - xuất trước và người đăng ký đi xe buýt có thể đến và đi mà người gửi tin nhắn không biết. Do đó, một ứng dụng A có thể được viết để thông báo cập nhật trạng thái cho ứng dụng B thông qua một bus tin nhắn. Sau đó, ứng dụng C được viết cũng có thể được hưởng lợi từ các bản cập nhật này. Ứng dụng C. đăng ký mô hình. Tin nhắn được xuất bản lên xe buýt và bất kỳ ứng dụng nào đã đăng ký loại tin nhắn đó sẽ nhận được nó.

NGUỒN


15

Sự khác biệt chính chưa thực sự được đề cập rõ ràng trong các câu trả lời khác là xe buýt thông báo cho phép nhiều người đăng ký trong khi một hàng đợi sẽ xếp hàng từng mục một cho bất kỳ thứ gì đang nghe hàng đợi. Nếu bạn muốn nhiều người nghe thấy các mục giống nhau sắp ra khỏi hàng đợi, bạn phải tự mình xử lý điều đó, xe buýt dịch vụ sẽ thực hiện việc này giúp bạn.


1
Không hoàn toàn đúng, ít nhất là nữa. Các dịch vụ như Amazon SQS sẽ cho phép nhiều người đọc cùng một tin nhắn. Khoảng thời gian "tàng hình" có thể cấu hình được. Nhiều hệ thống hàng đợi có các tính năng như vậy - cũng như thử lại và hàng đợi thư chết.
Tom

2
@Tom OP không đề cập đến bất kỳ sản phẩm cụ thể nào, vì vậy tôi nghĩ anh ấy đang cố gắng hiểu thuật ngữ và khái niệm - do đó, tôi thấy câu trả lời này hữu ích và đúng; ngay cả khi các nhà cung cấp tạo ra các sản phẩm kết hợp dựa trên cả hai khái niệm cũng đúng , tôi nghĩ rằng thuật ngữ này vẫn có giá trị và hữu ích.
mindplay.dk

4

Theo cách tôi thấy nó là Hàng đợi Thông báo tạo Xe buýt Thông báo . Khách hàng (tức là các nút) sau đó có thể nghe bus thông báo. Điều này đặc biệt đúng đối với trường hợp bạn có một MQ phát tin nhắn thông qua UDP, nói cách khác, nó đang gửi tin nhắn đến một địa chỉ quảng bá / đa hướng mà không biết hoặc không quan tâm ai sẽ nhận được chúng. Để có mô tả sâu hơn về trường hợp này, bạn có thể xem bài viết này .


0

Xe buýt dịch vụ là một thuật ngữ chung hơn là Hàng đợi tin nhắn.

MQ là một FIFO đơn giản, nhưng có nhiều cách phức tạp hơn để triển khai Service Bus, tức là Event Hub, là một "trung tâm" khổng lồ để thao tác các thông điệp. Bên cạnh chức năng do MQ cung cấp, nó cho phép lưu trữ các tin nhắn (và do đó sử dụng nhiều người đăng ký) v.v.


0

Một xe buýt thông báo là một mô hình phân phối 1 đến nhiều. Đích đến trong mô hình này thường được gọi là chủ đề hoặc chủ đề. Tất cả các thuê bao đang sử dụng đều nhận được cùng một thông báo đã xuất bản. Bạn cũng có thể gọi đây là mô hình 'phát sóng'. Bạn có thể coi một chủ đề tương đương với một Chủ đề trong mẫu thiết kế Observer cho tính toán phân tán. Một số nhà cung cấp bus thông báo chọn triển khai điều này một cách hiệu quả dưới dạng UDP thay vì TCP. Đối với chủ đề, việc gửi thông điệp là 'cháy và quên' - nếu không ai lắng nghe, thông điệp sẽ biến mất. Nếu đó không phải là những gì bạn muốn, bạn có thể sử dụng 'đăng ký lâu dài'.

Hàng đợi tin nhắn là điểm đến 1-1 của các tin nhắn. Tin nhắn chỉ được nhận bởi một trong những người nhận tiêu thụ (xin lưu ý: luôn sử dụng người đăng ký cho 'khách hàng chủ đề và người nhận cho khách hàng xếp hàng tránh nhầm lẫn). Tin nhắn được gửi đến hàng đợi được lưu trữ trên đĩa hoặc bộ nhớ cho đến khi ai đó nhặt hoặc nó hết hạn. Vì vậy, hàng đợi (và đăng ký lâu dài) cần một số quản lý lưu trữ tích cực, bạn cần nghĩ đến những người tiêu dùng chậm.

Trong hầu hết các môi trường, tôi cho rằng các chủ đề là lựa chọn tốt hơn vì bạn luôn có thể thêm các thành phần bổ sung mà không cần phải thay đổi kiến ​​trúc. Các thành phần được thêm vào có thể là giám sát, ghi nhật ký, phân tích, v.v. Bạn không bao giờ biết khi bắt đầu dự án các yêu cầu sẽ như thế nào trong 1 năm, 5 năm, 10 năm. Thay đổi là không thể tránh khỏi, hãy nắm lấy nó :-)

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.