RabbitMQ 核心与流插件
概述
本节涵盖 RabbitMQ 核心与 流插件之间的差异。流核心是指在仅激活默认插件的情况下,通过 AMQP 0.9.1、AMQP 1.0、MQTT 和 STOMP 等协议在 Broker 中使用的流功能。
功能矩阵
| 功能 | RabbitMQ 核心 | Stream 插件 |
|---|---|---|
| 激活方式 | 内置 | 必须激活 |
| 协议 | AMQP 0.9.1 和 AMQP 1.0 | RabbitMQ 流 |
| 客户端 | AMQP 0.9.1 客户端(文档)。AMQP 1.0 客户端(文档) | RabbitMQ 流客户端 |
| 端口 | 5672 | 5552 |
| 格式 | 服务端 AMQP 1.0 消息格式编码与解码 | 客户端 AMQP 1.0 消息格式编码与解码 |
| 子条目批处理 | 支持(未压缩) | 支持(Java 示例)。客户端压缩选项 |
| 偏移量跟踪 | 使用外部存储 | 内置服务端支持(Java 示例)或外部存储 |
| 发布去重 | 不支持 | 支持(Java 示例) |
| 超级流 (Super stream) | 不支持 | 支持 |
| 单活跃消费者 | 不支持 | 支持 |
| 吞吐量 | 每秒数十万 | 每秒数百万消息 |
| TLS | 支持(默认端口:5671) | 支持(默认端口:5551) |
互操作性
流使用 AMQP 1.0 消息格式存储消息。
- RabbitMQ 流客户端库预期支持 AMQP 1.0 消息格式
- 对于 AMQP 0.9.1 客户端,Broker 处理 AMQP 1.0 与 AMQP 0.9.1 之间的转换
- AMQP 0.9.1、AMQP 1.0 和流客户端均可向同一流写入或从中读取消息。子条目批处理在不压缩的情况下受支持。
- RabbitMQ 流支持 AMQP 1.0 消息格式的以下部分
- properties
- 应用属性 (application properties)
- 应用数据 (application data)
- 消息注解 (message annotations)
流客户端子条目批处理压缩选项
压缩在客户端完成。可用的压缩实现如下:
- 无压缩
- Gzip
- Snappy
- LZ4
- Zstd
下表解释了部分 RabbitMQ 流协议客户端支持的选项
| 客户端 | 支持 | 无压缩 | Gzip | Snappy | LZ4 | Zstd |
|---|---|---|---|---|---|---|
| Java | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| .NET | ✅ | ✅ | ✅ | ✅ 通过接口 | ✅ 通过接口 | ✅ 通过接口 |
| Go | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Python | ✅ | ✅ | ✅ | ✅ 通过接口 | ✅ 通过接口 | ✅ 通过接口 |
| NodeJS | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
| Rust | ❌ | ❌ | ❌ | ❌ | ❌ |