我尝试深入研究 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
但我不明白为什么我要选择其中之一。
可以分享一下你的想法吗?
RabbitMQ 是一种在进程、应用程序和服务器之间交换数据的方式。正如你所说,你可以选择它支持的几种协议之一。
您的选择将取决于您想要互连哪些应用程序或系统。例如:
如您所见,每种协议都有其优点和缺点,您的选择将取决于哪一种协议更适合您想要构建的应用程序。
有关每个协议的更详细说明,请参阅此链接
该协议仅定义客户端和服务器之间的通信,对消息本身没有影响。发布时可以使用一种协议,您可以使用另一种协议进行消费。
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.html和https://www.cloudamqp.com/docs/protocols.html
这是一个固执己见的答案,但如果您没有特殊的用例(即您只是让一般服务交互,就像在微服务架构中一样),则只需使用 AMQP 0-9-1。它很不错,并且在几乎任何编程语言中都有良好的客户端库支持。
如果您使用 IoT 设备或其他受限设备,请使用 MQTT。
我认为 STOMP 的需求不大,并且不会推荐 HTTP,因为它不被认为是可靠的。
但再说一次,我的意见。