comparison

Roxa vs RabbitMQ

These are tools for different jobs, and the honest answer is often “you need RabbitMQ”. RabbitMQ is classic task queues with flexible routing. Roxa is event streaming: history is retained, can be replayed, and consumers are independent.

RoxaRabbitMQ
Data modelLog/stream: history is kept and can be re-readQueue: a message is delivered — and gone
Replaying historyYes — any consumer from any offsetNo (the streams mode is a separate story)
Multiple independent readersNative: consumer groups with offsetsVia fanout plumbing
RoutingBy key into a partitionFlexible: exchanges, routing keys, TTL, priorities
StorageS3/MinIO or FS, retention by size/timeNode disk, mirrored by the cluster
ProtocolKafka wireAMQP 0-9-1
RuntimeRust, one containerErlang/OTP
an honest choice

When to pick RabbitMQ

Task queues between services: send — process — forget. Complex routing (by type, priority, with TTL and dead-letter), RPC patterns. No need for message history.

When to pick Roxa

Events you cannot afford to lose and want to replay: orders, payments, audit, telemetry. Several independent consumers of one stream. A new service joins — and reads history from wherever it needs.

A special case: if your RabbitMQ is already used as “sort of streaming” with hand-rolled plumbing for re-reading — that is exactly the pain the log model was built for. Migration means switching the client (AMQP → Kafka), but Kafka clients exist for every language.