At its core, a stream in RabbitMQ is:
In other words, a stream logs every message to disk in the order they arrive, and consumers can read these messages as many times as they want, starting at any point in the log. This architecture is closer to what event streaming systems like Apache Kafka provide, but built natively into RabbitMQ. For a broker-level comparison of RabbitMQ and Kafka, see RabbitMQ vs Kafka.
The way queues and streams work is fundamentally different:


Consuming a message from a queue removes it from that queue. One consumer gets the message, it’s delivered, and that’s it.
With streams, messages are not deleted when consumed. Multiple consumers can independently read the same message. Each consumer simply increments the index they are reading from.
Messages disappear from queues when processed. With streams, messages remain until retention policies (e.g., age or total size) expire them, regardless of consumption.
With traditional queues, consumers receive messages via acknowledgment-based delivery. Streams use offset-based reads: consumers pick an offset and read from that point forward.
Streams are designed for very high throughput, optimized with dedicated protocols and disk-based persistence.
With queues, each message goes to one consumer, unless you use many separate queues. But with streams, multiple consumers can read the same log independently, without needing separate infrastructure.
Streams do not replace traditional queues inside RabbitMQ, instead they complement them and shine in several specific scenarios:
If many services need to read the same message, streams let every consumer read from the same log. With queues, you’d need a separate queue and binding for each consumer, which quickly becomes inefficient at scale.
Because stream messages are retained after consumption, consumers (or new services) can replay messages or start reading from any point in time. This is useful for debugging, auditing, or rebuilding state.
Streams are designed to store large quantities of data efficiently on disk and handle high ingest rates, making them suitable for big data pipelines and high-volume event processing.
Use cases like event sourcing, log aggregation, and real-time analytics benefit from a log-based model where applications read at their own pace and replay if needed.
Traditional RabbitMQ queues remain ideal when:
Queues are simpler to reason about and still unmatched for many classic messaging patterns. Streams don’t replace them, they expand what RabbitMQ can do.
Streams in RabbitMQ blur the line toward event streaming platforms but keep the strength of RabbitMQ’s ecosystem. They offer:
All while coexisting with traditional queues and exchanges inside the same broker.
See how RabbitGUI can make your everyday RabbitMQ workflows easier.
Available on Windows, Mac, and Linux.

RabbitMQ tutorialRabbitMQ ports: 5672, 15672, 25672 and more explainedRabbitMQ's default port is 5672 for AMQP. The Management UI uses 15672, clustering uses 25672 and 4369. Full ports table, Docker mappings and fixes for connection problems.
RabbitMQ tutorialWhat Is RabbitMQ?Learn what RabbitMQ is, how it works, and why it’s used in modern software architectures. Discover RabbitMQ’s benefits, key components, use cases, and how it enables reliable asynchronous communication.
RabbitMQ tutorialSetting up RabbitMQ with Docker and Docker ComposeA complete guide to running RabbitMQ in Docker containers, from quick start examples to advanced configuration options for production environments
RabbitMQ tutorialRabbitMQ Best PracticesA practical guide to RabbitMQ best practices covering queue design, message handling, connection management, monitoring, and production-readiness tips.
RabbitMQ tutorialRabbitMQ vs KafkaEverything you need to know about the differences between RabbitMQ and Kafka.
RabbitMQ tutorialRabbitMQ: maximum size of a messageThe maximum size of a message in RabbitMQ is not defined by the protocol, but by the implementation. Unfortunately, this value is not well documented and has changed a lot over time