消息队列消息服务规范及代表产品

消息队列

Posted by Claire on January 25, 2024

市面上消息队列的种类繁多,我们经常在做技术选型的时候,就会搜“RabbitMQ/RocketMQ/Kafka…的区别”这样的字眼,为了就是更好地选型,结合业务需求以及消息队列的性能、功能特性、设计规范来综合考虑,确定一款适合的组件来承接业务需求。、

消息服务规范

主要是定义了一套标准和规则,用于在分布式系统中应用程序之间进行异步、可靠和有序的消息交换。

描述的内容主要包括:

  • 消息格式:规定了消息的结构、数据类型、头部信息(如优先级、时间戳、消息ID等)以及有效负载的内容格式。

  • 网络通信机制:定义了客户端如何与消息中间件服务器建立连接,包括传输层协议(例如TCP/IP)、序列化方式(如二进制或文本格式)以及认证和授权方法。

  • 操作模型:说明了消息生产者如何发布消息到队列或主题,消费者如何从队列或主题订阅并接收消息,以及消息路由和分发的策略。

  • 事务和可靠性保证:规范了消息传递过程中的事务处理、确认机制、消息持久性、消息顺序保证以及消息重试策略等。

  • 安全性和隐私保护:如果适用,会规定如何加密消息以确保数据的安全传输,以及支持访问控制和权限管理的方法。

  • 错误处理和故障恢复:描述了在遇到网络问题、节点故障等情况下,消息队列系统的容错机制和恢复流程。

通过学习和了解消息服务规范,可以了解到不同的规范可能面向不同的场景,对应实现指定规范的消息队列也就可以辅助你选择。

AMQP(Advanced Message Queuing Protocol)

AMQP是一个开放标准的高级消息队列协议,旨在为面向消息中间件提供统一的平台无关接口。它允许消息在不同的应用、操作系统和网络之间可靠传输。

支持AMQP的流行消息代理有:

  • RabbitMQ
  • Apache Qpid
  • Azure Service Bus
  • Amazon MQ
  • ActiveMQ Artemis(自5.7版本开始支持AMQP 1.0)

MQTT (Message Queuing Telemetry Transport)

MQTT是一种轻量级的发布/订阅消息协议,特别适合于低带宽、高延迟或不可靠网络环境下的物联网(IoT)设备间通信。更偏硬件的使用场景。

支持MQTT的流行消息代理有:

  • Mosquitto
  • HiveMQ
  • EMQ X
  • AWS IoT Core
  • IBM Watson IoT Platform

STOMP (Simple Text Oriented Messaging Protocol)

STOMP是一种简单易用的文本协议,适用于多种消息中间件系统。它定义了一种客户端可以与消息代理进行交互的标准帧格式。

支持STOMP的流行消息代理有:

  • RabbitMQ(通过插件支持)
  • ActiveMQ
  • Apache Apollo
  • Spring WebSocket STOMP Support

XMPP (Extensible Messaging and Presence Protocol)

虽然最初设计用于即时通讯,但XMPP也可用于消息传递和数据共享,尤其在网络中实现实时通信和通知服务。

支持XMPP的流行消息代理有:

  • Openfire
  • ejabberd
  • Tigase
  • MongooseIM

JMS (Java Message Service)

JMS不是一种网络协议,而是一个API规范,定义了如何在Java平台上创建、发送、接收和读取消息。JMS应用程序可以与任何遵循该规范的消息中间件协同工作。 允许应用程序通过不同的消息中间件(Message Oriented Middleware, MOM)产品进行互操作,这些MOM产品包括IBM WebSphere MQ、OracleAQ、ActiveMQ等

支持JMS的流行消息代理有:

  • Oracle WebLogic Server JMS
  • IBM WebSphere MQ
  • Apache ActiveMQ
  • Red Hat JBoss A-MQ

OpenWire

OpenWire是ActiveMQ项目开发的一种高效二进制协议,专为高性能传输而设计,主要用于Apache ActiveMQ与其他客户端之间的通信。

支持OpenWire的流行消息代理有: Apache ActiveMQ(原生支持)

AMQPS(AMQP over SSL/TLS)

这是在AMQP基础上使用SSL/TLS加密的版本,以确保消息在传输过程中的安全性。

MQTT-SN(MQTT for Sensor Networks)

为传感器网络优化的MQTT协议变体,针对资源受限的设备进行了调整。

主流产品时间线

时期 组件 特性
1983 Teknekron 软件总线的思想诞生
1985 The Information Bus(TIB) 发布订阅模式模式诞生,用于解决金融交易
1993 IBM MQ 用于金融服务行业
1997 MSMQ 微软消息队列诞生
2001 JMS规范出现 不同的API、不同的协议,无法组成单一的总线
2003 ActiveMQ 市场上大多数的MOMs是商业,闭源而且购买和支持昂贵,市场继续一个开源的消息队列组件
2004 AMQP规范出现 设计为开发标准,用于解决众多的消息队列需求和拓扑结构
2006 RabbitMQ 跟进AMQP标准,快速迭代
2011 Kafka Linkedin团队为满足自己的业务需求而开发的产品,取代ActiveMQ
2012 RocketMQ Kafka在大数据等在线、离线分析链路表现出色,但在业务处理高并发的场景下堆积严重显得力不从心,阿里巴巴结合自身需求自研RocketMQ
2018 Pulsar 雅虎内部为解决多部门、多租户问题,自研Pulsar