当我为RabbitMq选择协议时,我应该引导什么

时间:2017-08-14 11:33:49

标签: java spring-boot rabbitmq amqp spring-amqp

我尝试深入了解java中的消息。我正在调查RabbitMq和AMQP协议。首先,我重复了https://spring.io/guides/gs/messaging-rabbitmq/中的几个示例和https://www.rabbitmq.com/

中的示例

现在我想更详细地了解它。

官方网站feature section看起来像广告。它说RabbitMQ支持几种协议:

  

AMQP 0-9-1,0-9和0-8,以及分机
  STOMP
  MQTT
  AMQP 1.0
  HTTP

但我无法理解为什么要选择其中一个。

你能分享一下自己的想法吗?

2 个答案:

答案 0 :(得分:2)

RabbitMQ是一种在进程,应用程序和服务器之间交换数据的方法。如你所说,你可以选择它支持的几种协议之一。

您的选择将取决于您要互连的应用程序或系统。例如:

  • MQTT :是一种轻量级协议,占用空间小,非常适合低带宽资源受限设备之间的通信,如嵌入式系统。
  • STOMP :基于文本,使其更类似于HTTP,可用于与Web服务器进行消息传递。

正如您所看到的,每个协议都有其优点和缺点,您的选择将取决于哪个协议更适合您要构建的应用程序。

有关每种协议的更详细说明,请参阅此link

答案 1 :(得分:1)

协议仅定义客户端与服务器之间的通信,对消息本身没有影响。发布时可以使用一种协议,您可以使用其他协议。

AMQP (高级消息队列协议):RabbitMQ最初是为支持AMQP而开发的,AMQP是RabbitMQ代理支持的“核心”协议。 AMQP旨在有效支持各种消息传递应用程序和通信模式。路由是AMQP中的一项功能,AMQP是交换机决定将消息放入哪个队列的过程。 RabbitMQ中的消息根据交换类型和密钥从交换路由到队列。 (与MQTT相比,AMQP中的路由选项更复杂)。 RabbitMQ现在实现了规范的0-9-1版本 - 对其他版本的传统支持。 AMQP 1.0是与AMQP 0-9-1 / 0-9 / 0-8完全不同的协议。

MQTT (消息队列遥测传输)具有最小的设计,非常适合内置系统,移动电话和其他内存和带宽敏感的应用程序。使用AMQP也可以实现特定任务,但对于这种特定类型的场景,MQTT可能是更合适的协议选择。

HTTP (超文本传输​​协议)是用于分布式协作超媒体信息系统的应用程序级协议。 HTTP不是消息传递协议。但是,RabbitMQ可以通过HTTP传输消息。

STOMP (简单或流式文本导向消息协议)是一种简单的基于文本的协议,用于跨应用程序传输数据。它比AMQP更简单,更简单,它更类似于HTTP。 STOMP客户端几乎可以与每个可用的STOMP消息代理进行通信,这为许多语言,平台和代理提供了简单而广泛的消息传递互操作性。例如,可以使用telnet客户端连接到STOMP代理。

来源:https://www.rabbitmq.com/protocols.htmlhttps://www.cloudamqp.com/docs/protocols.html