Intro

Broker selection starts with workload semantics, not popularity. A work queue, a retained event log, and a Windows-integrated enterprise queue place different demands on routing, replay, ordering, and operations. Message Queues explains the common mechanism; this note owns the choice.

Comparison

NeedRabbitMQ classic/quorum queuesKafkaMSMQ
Work distributionStrong fit with acknowledgements and flexible exchangesPossible through consumer groups, but retention/log semantics dominateStrong fit for Windows-local and legacy enterprise workflows
ReplayConsumed messages are normally removed; replay needs republishing or a separate retained designNative offset-based replay within retentionNot a retained event-log model
RoutingExchanges, bindings, topics, headersTopic and partition selectionQueue-oriented Windows integration
OrderingPer queue, affected by redelivery and competing consumersPer partitionPer queue under constrained delivery patterns
OperationsQueue depth, unacked messages, redelivery, node healthPartitions, replication, group rebalances, lag, retentionWindows administration and legacy platform constraints

RabbitMQ Streams changes the comparison

RabbitMQ Streams adds a persistent replicated append-only log beside classic and quorum queues. It is a separate queue type with non-destructive consumers, so a consumer can attach at an earlier offset and replay records until age- or size-based retention removes their segments.

ConcernRabbitMQ StreamsKafka
Replay and retentionOffset or timestamp replay; retention by age and/or total bytesOffset replay; retention by time and/or size, with compaction available for keyed state
Ordering and scaleOrdered within one stream; a super stream partitions traffic and preserves order only within each partitionOrdered within a partition; topics scale through partitions
OperationsRabbitMQ cluster plus stream replicas, disk/page-cache capacity, retention, and consumer offset tracking; the dedicated stream protocol is recommended for full features and throughputBroker/controller operations, partitions and replicas, retention, consumer lag, and rebalances

Choose Streams when RabbitMQ is already the operational center and the workload needs large fan-out, replay, or large backlogs. Choose Kafka when retained logs, partitioned consumer groups, and the Kafka ecosystem are the system’s primary model. Super streams add partition-management cost, so use them only after one stream’s throughput is measured as the limit.

Decision examples

Use RabbitMQ classic or quorum queues for GenerateInvoice jobs that need acknowledgements, delay/retry topology, and routing by tenant. Use Kafka for OrderPlaced events consumed by billing, fraud, analytics, and replayable projections. Keep MSMQ when an existing Windows estate depends on its transactional integration and migration cost exceeds current value; do not choose it for a new cross-platform system.

Cloud services such as Azure Service Bus, Amazon SQS/SNS, and Google Pub/Sub are often better when the team wants managed operations. Compare their concrete ordering, deduplication, dead-letter, maximum-size, retention, and throughput contracts rather than assuming the same semantics as an open-source broker.

References