【问题标题】:Message-oriented middleware vs message queue面向消息的中间件 vs 消息队列
【发布时间】:2014-08-07 09:20:06
【问题描述】:

我想知道如何区分什么软件是面向消息的中间件,什么是消息队列?

更进一步——服务总线使用队列还是面向消息的中间件?或者服务总线本身就是面向消息的中间件?

例如 RabbitMQ 只是消息队列还是包含面向消息的中间件功能?

这些术语似乎很模糊。请指教。谢谢你:)

【问题讨论】:

    标签: rabbitmq message-queue nservicebus servicebus rebus


    【解决方案1】:

    根据*:

    Message-oriented middleware (MOM) 是 支持发送和接收的软件或硬件基础设施 分布式系统之间的消息。

    在计算机科学中,message queues 和邮箱是 用于进程间通信的软件工程组件 (IPC),或用于同一进程内的线程间通信。

    我会将消息队列描述为较低的抽象,就像消息如何组织、存储和传递的概念一样。

    对于面向消息的中间件,消息队列不是必须的。比如说,您可以让 MOM 广播任何消息,而不关心网络或任何其他延迟或潜在故障和消息丢失。在这种情况下,无法保证消息传递和传递顺序。当然,它是非常具体的用例,但是这样的软件(或硬件)可以称为 MOM。

    所以RabbitMQ 本身就是面向消息的中间件。在内部,它利用 FIFO 队列进行消息存储。*也这么说:

    RabbitMQ 是开源消息代理软件(有时称为 面向消息的中间件),实现了高级消息 排队协议 (AMQP)。

    对于 NServiceBus,它使用 MOM(by default MSMQ,但您也可以启用 other transport support ,如 RabbitMQ 或其他)作为其传输,所以是的,它利用消息队列概念和 MOM 本身。根据定义,NServiceBus 是 MOM 本身(比大多数传输 MOM 更高级别)。

    所以NServiceBus更像是架构概念,抽象在各种MOM之上。如需进一步阅读,请参阅此处关于 SO 的Specific advantages of NServiceBus over plan RabbitMQ 问题,这有助于了解 NServiceBus 的想法。

    【讨论】:

    • 你确定 NServiceBus 使用 MQTT,而不是 AMQP?
    • 对不起,默认情况下不是 MQTT,而是 MSMQ(我在答案中做了这个修复)。 AMQP 是协议(如 HTTP、FTP、RTMP、SAMBA 等)。 MQTT 也是协议,MSMQ 是协议,由微软实现。 MSMQ在MOM定义下传递,通常称为MOM,在网上搜索“MSMQ中间件”即可。