跳转到正文

消息协议资料 ​

协议定义客户端与服务端如何交换消息;Broker 产品则实现协议,并在其上增加存储、集群、安全、管理和运维能力。不要把协议名和产品名混为一谈。

通用协议与 API ​

名称类型核心模型典型实现文档
MQTT 3.1.1 / 5.0OASIS 线协议Topic 发布订阅、QoS、会话、Retained/WillMosquitto、EMQX、HiveMQ、ArtemisMQTT
AMQP 0-9-1开放二进制线协议Exchange → Binding → QueueRabbitMQAMQP 0-9-1
AMQP 1.0OASIS 二进制线协议Container、Session、Link、Source/Target、SettlementArtemis、RabbitMQ、ActiveMQ Classic、Azure Service BusAMQP 1.0
STOMP 1.2开放文本线协议Destination、Frame、ACK、TransactionArtemis、ActiveMQ Classic、RabbitMQ 插件STOMP
JMS / Jakarta MessagingJava 编程 API,不是线协议Queue/Topic、Producer/Consumer、Session/JMSContextArtemis、ActiveMQ Classic 等 JMS ProviderJMS / Jakarta Messaging
OpenWireActiveMQ 原生二进制线协议Command、Destination、JMS 语义映射ActiveMQ Classic、Artemis 兼容层OpenWire

产品私有协议 ​

产品主要客户端协议说明
KafkaKafka Protocol围绕 Metadata、Produce、Fetch、Consumer Group 等 API,服务 Kafka 自身语义
RocketMQRemoting / gRPC Proxy5.x 客户端经 Proxy 使用 gRPC,Broker 内部仍有产品特定协议
PulsarPulsar Binary Protocol面向 Producer、Consumer、Subscription 与 BookKeeper 存储体系
NATSNATS Protocol简洁文本控制行加 Payload,JetStream 能力通过 NATS API 暴露
Redis StreamsRESPStreams 是 Redis 数据类型,客户端通过通用 RESP 命令访问

产品私有协议并不天然“更差”;它们通常能完整表达本产品能力。开放协议的主要价值是客户端与 Broker 互操作,但不同 Broker 对地址、持久化、事务和扩展头的映射仍需实测。

最容易混淆的三点 ​

  1. AMQP 0-9-1 不是 AMQP 1.0 的旧版兼容模式:二者模型和线上帧都不同。
  2. JMS 不是协议:Java 代码使用 JMS API,Provider 可以在底层选择 OpenWire、AMQP、Core 或其他协议。
  3. WebSocket 不是消息语义:它是浏览器可用的双向传输,MQTT/STOMP 可以运行在 WebSocket 之上。

以统一实验验证消息系统语义边界