我尝试深入了解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
但我无法理解为什么要选择其中一个。
你能分享一下自己的想法吗?
答案 0 :(得分:2)
RabbitMQ是一种在进程,应用程序和服务器之间交换数据的方法。如你所说,你可以选择它支持的几种协议之一。
您的选择将取决于您要互连的应用程序或系统。例如:
正如您所看到的,每个协议都有其优点和缺点,您的选择将取决于哪个协议更适合您要构建的应用程序。
有关每种协议的更详细说明,请参阅此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.html和https://www.cloudamqp.com/docs/protocols.html