Architecture AMQP是否适合作为机器内和机器间软件总线?

Architecture AMQP是否适合作为机器内和机器间软件总线?,architecture,message-queue,distributed,amqp,Architecture,Message Queue,Distributed,Amqp,我正试着清醒过来。它看起来非常适合应用程序之间的机器间(集群、LAN、WAN)通信,但我不确定它是否适合(在体系结构和当前实现方面)用作一台机器内的软件总线 是否值得拿出一个当前的高性能消息传递框架来用AMQP取代它,还是因为模糊了本地和非本地通信之间的区别而陷入困境 我还担心使用WAN技术进行机器内通信会对性能产生影响,尽管这可能是一个实现问题,而不是架构问题 战争故事将不胜感激。AMQP是一种规格说明,所以你真的可以将苹果和橙子进行比较。没有那么多生产准备好的AMQP供应商;在撰写本文时,没

我正试着清醒过来。它看起来非常适合应用程序之间的机器间(集群、LAN、WAN)通信,但我不确定它是否适合(在体系结构和当前实现方面)用作一台机器内的软件总线

是否值得拿出一个当前的高性能消息传递框架来用AMQP取代它,还是因为模糊了本地和非本地通信之间的区别而陷入困境

我还担心使用WAN技术进行机器内通信会对性能产生影响,尽管这可能是一个实现问题,而不是架构问题


战争故事将不胜感激。

AMQP是一种规格说明,所以你真的可以将苹果和橙子进行比较。没有那么多生产准备好的AMQP供应商;在撰写本文时,没有一家主要的消息传递提供商或供应商支持AMQP(例如IBM、Tibco、Sonic、BEA、Oracle、SwiftMQ、MS、Apache ActiveMQ、Sun的openmq),因此所有可用的AMQP提供商都是全新的


因此,我建议将您感兴趣的AMQP提供程序与您的消息传递框架进行比较。仅仅因为它在套接字中读取和写入字节的方式,就没有必要剥离出工作正常的东西:)

AMQP看起来更像是为SOA提供的可靠传输中间件,而不是内部使用的东西。

AMQP不是RPC框架。它提供了构建模块来对共享队列、RPC、pubsub等进行建模,但它不要求使用任何特定的方法


如果您想对应用程序进行分区(使其在途中可分发),并将其与AMQP连接在一起,我认为这是正确的技术。虽然可能有更快的替代方案,但可能没有一种比AMQP更通用。

作为可靠、极为灵活(就消息传递模式而言)的基础,它可以用于许多消息传递场景,包括机器内(即进程间)和网络间。它可以从零扩展到大型、高带宽、多网络系统


我目前正在为一个小型但相对复杂的近实时系统进行评估,在这个系统中,我们不关心消息传播的距离,也不关心消息被谁/什么(在合理范围内)使用。如果消费者坐在同一台机器上,那么就这样吧。我会试一试,看看你对它有什么看法。如果您想组合一个原型系统,请使用python和库。

如果您主要对机器内场景中的性能感兴趣,那么问题不在于AMQP(它只是一个有线级别的协议),而在于您应该尝试哪种实现

通过消除网络带来的延迟,您可能会对各种实现的原始性能更加敏感。因此,我将研究C++中实现的产品,如QPID或ZrOMQ。p>
在一些像样的硬件(四核)上,Qpid可以轻松达到每秒400000条消息(1024字节的消息)。Zeromq的性能可能会更好,因为您可以使用对等通道,而Qpid使用的是代理体系结构(这有一个步骤)。

AMQP标准正在变得成熟,并解决了困扰其他消息传递标准(如JMS)的一些棘手问题。对于您提出的替换现有解决方案是否值得的问题,我认为这要视情况而定。我会非常怀疑,因为该系统可能已经在生产中运行,并且性能很好

如果您遇到以下问题:

  • 互操作性不起作用
  • 不容易扩展
  • 性能不够好
  • 当前的消息传递解决方案成本高昂(维护成本高)

您应该调查所需的工作,并更准确地分析其好处。如果您已经很满意,那么更换消息传递框架不会带来投资回报。

ApacheActiveMQ确实支持amqp,但大多数开发工作已经转移到ApacheQPID上。它是可用的两个主要AMQP代理之一(使用RabbitMQ)。AMQP在某种程度上可以被视为Tibco、BEA等更开放的竞争对手。我们中的许多人认为这是一个主要优势;)ActiveMQ在取代手工传递纸片之前还有一段路要走,更不用说取代Tibco.skaffman了,怎么会这样呢?这仅仅是关于ActiveMQ或AMQP的一般问题——我对相对的优势和劣势感兴趣。我认为这个答案已经过时了。例如,RabbitMQ优于任何非AMQP消息传递系统,并被NASA用于一些严重的重载。将其与Sonic叠加作为“生产就绪”解决方案,Sonic看起来像个笑话。