几张图搞懂息队列 Message Que

消息中间件其实诞生的很早,在互联网应用还是一片荒芜的年代,有个在美国的印度小哥 Vivek Ranadive 就设想了一种通用软件总线,采用发布订阅的模式,类似于电脑主板上的总线,新的设备或者程序如果想和电脑上其他的设备软件通信,只需要按照协议对接总线就可以完成接入和通信!
在 1983 年,26 岁的印度小哥 Vivek Ranadive 创办了一家公司 Teknekron,实现了世界上第一个消息中间件 The Information Bus(TIB)。很快 TIB 软件受到了企业的欢迎,最初被高盛集团用于解决金融交易,Teknekron 的业务发展速度甚至引起了当时最牛逼的 IT 公司 IBM 的注意。于是 IBM 也开始组建团队来研发自己的消息队列软件,这才有了后来的 wesphere mq,不久微软也加入了战团。
由于商业壁垒,每个软件厂商都按照自己的标准来实现软件通信,导致企业客户不能随便更换 MQ 平台。
为了打破这个壁垒,同时为了能够让消息在各个消息队列平台间互融互通, JMS (Java Message Service) 应运而生 。JMS 试图通过提供公共 Java API 的方式,隐藏单独 MQ 产品供应商提供的实现接口,从而跨越了壁垒,已解决互通问题。
从技术上讲, Java 应用程序只需针对 JMS API 进行编程,选择合适的 MQ 驱动即可, JMS 会打理好其他部分,就好比类似于 JDBC,对于开发者来说,只需要编写好 sql,具体是使用 oracle 还是 mysql 或者 sqlserver.
然后市场上便发展处了如下 MQ 协议和供应商百花齐放的局面了。
常见实现
RabbitMQ:最流行的 AMQP 协议实现,支持丰富的扩展功能。
ActiveMQ:支持 AMQP 和其他协议(如 STOMP、MQTT)。
Azure Service Bus:微软云的托管消息服务,兼容 AMQP。

RabbitMQ
AMQP(Advanced Message Queuing Protocol,高级消息队列协议)是一种开放标准的应用层协议,专为消息中间件(Message Broker)设计,旨在实现不同系统或组件之间的可靠、异步、跨平台的消息通信。它被广泛应用于分布式系统、微服务架构和企业应用中,帮助解耦服务、提高系统的可扩展性和容错性。
由标准化组织(OASIS)维护,确保不同消息中间件(如 RabbitMQ、ActiveMQ)的兼容性


KAFKA
Kafka 的通信协议是其实现高吞吐量、低延迟和分布式可靠性的核心基础。虽然 Kafka 协议并非开放标准(如 AMQP),但其设计针对大规模实时数据流场景进行了深度优化
二进制协议设计:Kafka 使用紧凑的二进制格式传输数据(而非文本协议如 HTTP/AMQP)
基于 TCP 的长连接
分区(Partition)与水平扩展
持久化与高吞吐
消费者拉取(Pull)模型



评论