RabbitMQ Core 与 Stream 插件
概述
本节介绍 RabbitMQ Core 与 Stream 插件 之间的区别。Stream Core 指的是激活了默认插件的 Broker 中的流功能,通过 AMQP 0.9.1、AMQP 1.0、MQTT 和 STOMP 等协议实现。
功能矩阵
| 功能 | RabbitMQ Core | Stream 插件 |
|---|---|---|
| 激活 | 内置 | 必须激活 |
| 协议 | AMQP 0.9.1 和 AMQP 1.0 | RabbitMQ Stream |
| 客户端 | AMQP 0.9.1 客户端(文档)。AMQP 1.0 客户端(文档) | RabbitMQ Stream 客户端 |
| 端口 | 5672 | 5552 |
| 格式 | 服务器端 AMQP 1.0 消息格式编码和解码 | 客户端 AMQP 1.0 消息格式编码和解码 |
| 子条目批处理 | 支持(未压缩) | 支持(Java 示例)。客户端压缩选项 |
| 偏移量跟踪 | 使用外部存储 | 内置服务器端支持(Java 示例)或外部存储 |
| 发布去重 | 不支持 | 支持(Java 示例) |
| 超级流 | 不支持 | 支持 |
| 吞吐量 | 每秒数十万 | 每秒数百万消息 |
| TLS | 支持(默认端口:5671) | 支持(默认端口:5551) |
互操作性
Stream 使用 AMQP 1.0 消息格式存储消息。
- RabbitMQ Stream 客户端库应支持 AMQP 1.0 消息格式
- Broker 会处理 AMQP 0.9.1 客户端与 AMQP 1.0 之间的转换
- AMQP 0.9.1、AMQP 1.0 和 Stream 客户端可以写入和读取相同的流。子条目批处理在未压缩的情况下受支持。
- RabbitMQ Stream 支持 AMQP 1.0 消息格式的以下部分
- properties
- 应用程序属性
- 应用程序数据
- 消息注解
Stream 客户端子条目批处理压缩选项
压缩在客户端进行。可用的压缩实现
- 无压缩
- Gzip
- Snappy
- LZ4
- Zstd
下表说明了多个 RabbitMQ Stream 协议客户端支持的选项
| 客户端 | 支持 | 无压缩 | Gzip | Snappy | LZ4 | Zstd |
|---|---|---|---|---|---|---|
| Java | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| .NET | ✅ | ✅ | ✅ | ✅ 通过接口 | ✅ 通过接口 | ✅ 通过接口 |
| Go | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Python | ✅ | ✅ | ✅ | ✅ 通过接口 | ✅ 通过接口 | ✅ 通过接口 |
| NodeJS | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
| Rust | ❌ | ❌ | ❌ | ❌ | ❌ |