Message Queue VS Message Bus

MESSAGE QUEUE

Message Queue work flow

Message Queue nôm na là Queue (hàng đợi), chứa Message (Tin nhắn) như hộp thư.  Và nó cho phép các thành phần/service trong một hệ thống (hoặc nhiều hệ thống), trao đổi thông tin cho nhau.

Message queue nhận message từ một application và cung cấp chúng cho một hoặc nhiều application khác theo cơ chế vào trước thì ra trước ( First In First Out ).

Một số Message queue được dùng hiện nay:

  • Kafka
  • Pulsar
  • RabitMQ
  • ActiveMQ
  • SQS
  • ZeroMQ
  • MSMQ
  • IronMQ
  • Kinesis
  • RocketMQ

Architectural scenarios

Nếu API A cần gửi thông tin cập nhật trạng thái tới các API B và C, thì message queue được thiết lập riêng cho B và C.

A sẽ gửi các message riêng biệt cho mỗi queue và mỗi API nhận sẽ đợi và nhận messgae từ queue được thiết lập riêng, sau khi gửi message thành công thì message sẽ bị khử khỏi queue.

Lúc A gửi message thì cả B và C đều không cần có sẵn để nhận message. Message queue luôn hoạt động, vì vậy nếu một API nhận bị khởi động lại, thì nó sẽ bắt đầu kéo message từ queue riêng của nó khi nó trở lại trực tuyến.

Điều này giúp phá vỡ sự phụ thuộc giữa các hệ thống và cung cấp khả năng mở rộng và khả năng chịu lỗi lớn hơn cho các API.


MESSAGE BUS

Message Bus work flow

Message bus còn được gọi Service Bus.

Message Bus cung cấp phương thức để một hoặc nhiều application giao tiếp message đến một hoặc nhiều application khác.

Message Bus không đảm bảo cho việc vào trước xuất trước. Người nhận (Subscribers) đã đăng ký Message Bus có thể nhận message được publish mà không biết về người gửi (Publisher or Sender).

Một số Message Bus được dùng hiện nay:

  • Commercial
    • IBM Integration Bus
    • IBM WebSphere ESB
    • InterSystems Ensemble
    • Information_Builders iWay Service Manager
    • Microsoft Azure Service Bus
    • Microsoft BizTalk Server
    • Mule ESB
    • Oracle Enterprise Service Bus
    • Progress Software Sonic ESB (acquired by Trilogy)
    • SAP Process Integration
    • TIBCO Software ActiveMatrix BusinessWorks
    • webMethods enterprise service bus (acquired by Software AG)
    • Sonic ESB from Aurea
  • Open source
    • Apache Camel
    • Apache ServiceMix
    • Apache Synapse
    • Fuse ESB from Red Hat
    • JBoss ESB
    • NetKernel
    • Open ESB
    • Petals ESB
    • Spring Integration
    • UltraESB
    • WSO2 ESB

Architectural scenarios

Nếu API A truyền thông tin cập nhật trạng thái cho API B thông qua một Bus.

Sau đó, API C cũng có thể hưởng lợi từ những cập nhật này. Ứng dụng C có thể được cấu hình để listen Bus và thực hiện hành động dựa trên các cập nhật này mà không cần bất kỳ yêu cầu cập nhật nào từ API A.

Không giống như Message queue, API gửi message vào queue cho tất cả các API nhận, Message bus sử dụng mô hình Publisher / Subscribers.

Message được API gửi publish lên Bus thì bất kỳ API nhận nào đã subscribe loại tin nhắn nào thì sẽ nhận được message tương ứng.

Cách tiếp cận này cho phép các API tuân theo nguyên tắc Open/Closed, vì chúng trở nên mở đối với các thay đổi trong tương lai trong khi vẫn đóng để sửa đổi bổ sung.

Site Footer

Sliding Sidebar

About Me

About Me

Hello, my name is Dũng (Johnny). Welcome to my blog.

As I’m a developer, I write about topics related to the field of programming, mainly from a technical point of view. On this blog you’ll find posts which encourage discussion, information about development trends, case studies, reviews, tutorials, tips on how to improve your effectiveness, and anything else that might be fascinating to people from the IT industry.
I love PHP, NodeJS,... and Fullstack.