RabbitMq 选择协议时应该注意什么

问题描述 投票:0回答:3

我尝试深入研究 Java 中的消息传递。我正在研究 RabbitMq 和 AMQP 协议。首先,我重复了 https://spring.io/guides/gs/messaging-rabbitmq/ 中的几个示例以及 https://www.rabbitmq.com/

中的示例

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

官方网站功能部分看起来像广告。上面说 RabbitMQ 支持多种协议:

AMQP 0-9-1、0-9 和 0-8 以及扩展

MQTT
AMQP 1.0
HTTP

但我不明白为什么我要选择其中之一。

可以分享一下你的想法吗?

java spring-boot rabbitmq amqp spring-amqp
3个回答
2
投票

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

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

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

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

有关每个协议的更详细说明,请参阅此链接


1
投票

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

AMQP(高级消息队列协议):RabbitMQ 最初是为了支持 AMQP 而开发的,AMQP 是 RabbitMQ 代理支持的“核心”协议。 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


0
投票

这是一个固执己见的答案,但如果您没有特殊的用例(即您只是让一般服务交互,就像在微服务架构中一样),则只需使用 AMQP 0-9-1。它很不错,并且在几乎任何编程语言中都有良好的客户端库支持。

如果您使用 IoT 设备或其他受限设备,请使用 MQTT。

我认为 STOMP 的需求不大,并且不会推荐 HTTP,因为它不被认为是可靠的。

但再说一次,我的意见。

© www.soinside.com 2019 - 2024. All rights reserved.