选择你的消息协议 AMQP, MQTT,STOMP

原文:

https://blogs.vmware.com/vfabric/2013/02/choosing-your-messaging-protocol-amqp-mqtt-or-stomp.html

当我讨论软件架构主题时,我被问的最常多的一个问题就是是当前存在的各种应用程序消息传递协议之间的区别 - 诸如协议如何和为什么出现,以及在特定应用程序中应该使用哪一个的问题。

他们的问题是有效的。

今天,应用程序架构师需要使用消息传递代理来加速和扩展他们的应用程序,特别是在云端。即使您选择了消息传递中间件应用程序,应用程序开发人员也需要选择协议。理解它们之间的细微差别可能很困难。

今天,我们将考虑三种最常见和最流行的基于TCP / IP的消息传递协议,并对AMQPMQTTSTOMP各自优势提供摘要。在我们继续之前,我还应该指出RabbitMQ版本3.0中支持这三个协议 - 我们将使用这些协议作为示例并稍后再回来。

所以,按字母顺序排列......

AMQP in a Nutshell

AMQP代表高级消息队列协议,旨在作为现有的专有消息中间件的开放替代品。使用AMQP的两个最重要的原因是可靠性和互操作性。顾名思义,它提供了与消息传递相关的各种功能,包括可靠的排队,基于主题的消息发布和订阅,灵活的路由,事务和安全性。AMQP以扇出形式,按主题和基于标题直接交换路由信息。

这种丰富的功能集可以实现许多细粒度控制。您可以限制对队列的访问,管理其深度等。消息属性,注释和标题等功能使其非常适合各种企业应用程序。该协议旨在提高许多大型公司的可靠性,这些公司依靠消息传递来集成应用程序并在组织中移动数据。在RabbitMQ的情况下,有许多不同的语言实现和可用的大样本,使其成为构建大规模,可靠,弹性或集群消息传递基础结构的良好选择。

AMQP是一种二进制有线协议,旨在实现不同供应商之间的互操作性。在其他协议失败的情况下,AMQP的采用率很高。摩根大通等公司每天使用它来处理10亿条消息。NASA将其用于 Nebula Cloud 计算。Google将其用于复杂的事件处理。以下是一些其他AMQP示例和链接:

MQTT概述

MQTT(消息队列遥测传输)最初是由IBM的 pervasive computing团队和他们工业领域的合作伙伴合作开发的。在过去的几年中,协议已经转移到开源社区,随着移动应用程序的开始,人们看到了显着的增长,并且它正在进入标准组织的手中。

MQTT的设计原则和目标比AMQP更简单,更集中 - 它提供了发布和订阅消息传递(没有队列,尽管名称),专门针对资源受限的设备和低带宽,高延迟网络,例如拨号线路和卫星链路。基本上,它可以在嵌入式系统中有效使用。

MQTT对功能更强大的“企业消息传递”代理商的优势之一是其故意低占用空间使其成为当今移动和开发“ 物联网 ”风格应用程序的理想选择。事实上,像Facebook这样的公司正在将它作为移动应用程序的一部分,因为它具有如此低的功耗,并且网络带宽很小。

一些基于MQTT的代理支持数千个并发设备连接。它提供三种服务质量:

  • “至多一次”,消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。
  • “至少一次”,确保消息到达,但消息重复可能会发生。
  • “只有一次”,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。

MQTT的优点是简单(只有五种API方法),一个紧凑的二进制数据包有效负载(没有消息属性,压缩标头,比基于文本的HTTP更简洁),它非常适合简单的推送消息传递方案,如温度更新,股票价格代码,油压供应或移动通知。它对于将机器连接在一起也非常有用,例如使用MQTTArduino设备连接到Web服务

mqtt.org了解更多信息

The Dirt on STOMP

STOMP(简单/流式文本导向的消息传递协议)是这三种协议中唯——种基于文本的协议,因此就其在封面上的外观而言,它更类似于HTTP。与AMQP一样,STOMP提供带有属性的消息(或帧)标头和帧体。这里的设计原则是创建一些简单且可广泛互操作的东西。例如,可以使用像telnet客户端这样简单的东西连接到STOMP代理。

但是,STOMP不处理队列和主题——它使用带有“目标”字符串的SEND语义。代理必须映射到内部理解的内容,例如主题,队列或交换。消费者然后订阅这些目的地。由于规范中没有强制要求这些目的地,因此不同的经纪人可能会支持不同的目的地风格。因此,在代理之间移植代码并不总是直截了当的。

然而,STOMP简单而轻巧(尽管在线上有点冗长),具有广泛的语言绑定。它还提供了一些事务语义。其中一个最有趣的例子是RabbitMQ Web Stomp,它允许您通过websockets在浏览器中公开消息。这开辟了一些有趣的可能性——比如使用所有类型的信息实时更新浏览器,移动应用程序或机器。

有关详情,请访问stomp.github.com

RabbitMQ:Polyglot Broker

希望这可以帮助许多人开始为每个用例导航协议(感觉这句翻译的不对)。由于公司通常有许多具有不同需求的应用程序,因此您可能需要跨程序使用三个代理服务。这就是像RabbitMQ这样的可靠的多协议,多语言代理进入的地方 - 因为它可以发送STOMP,MQTT或AMQP并获得其中一个。您不需要通过其中一个协议锁定——所有这三个协议都由RabbitMQ代理支持,使其成为应用程序之间互操作性的理想选择。插件架构还使RabbitMQ能够在未来发展去支持这些协议的其他或更新版本。

猜你喜欢

转载自blog.csdn.net/xuemengrui12/article/details/86678498