Home/Learn/RabbitMQ/Durable vs Transient Queues

Durable vs Transient Queues

Beginner
Queues

Durable queues survive broker restart; transient queues are lost on restart. Combine durable queues with persistent message delivery mode for full data safety.

Overview

Durability in RabbitMQ has two independent dimensions: queue durability (the queue definition is persisted to disk and recreated after restart) and message persistence (each message's delivery-mode=2 causes it to be written to disk). Both must be set for full data safety: a durable queue with transient messages loses undelivered messages on restart; a persistent message in a non-durable queue loses the queue (and messages) on restart. For classic queues (pre-4.x), disk writes are batched, so there is a brief window of data loss under power failure — quorum queues replicate to multiple nodes for stronger guarantees.

Declaring Durable Queues

Set durable=true when declaring. Every message published to this queue should also have delivery mode 2 (persistent). Spring's MessageProperties.setDeliveryMode() or MessageDeliveryMode.PERSISTENT achieves this.

Java — durable queue + persistent message delivery mode
@Bean
public Queue ordersDurableQueue() {
    return QueueBuilder.durable("orders.processing").build();
    // durable=true by default in QueueBuilder.durable()
}

// Publishing with persistent delivery mode
@Autowired RabbitTemplate rabbitTemplate;

public void publishOrder(OrderEvent event) {
    rabbitTemplate.convertAndSend("orders", "order.created", event, message -> {
        message.getMessageProperties()
               .setDeliveryMode(MessageDeliveryMode.PERSISTENT);
        return message;
    });
}

Transient Queues — When to Use

Transient (non-durable) queues suit ephemeral data where durability is unneeded: fanout broadcast subscribers, temporary reply queues for RPC, or short-lived session-scoped consumers. They have lower write overhead because messages are never flushed to disk.

Java — non-durable queue for ephemeral use cases
// Non-durable queue — lost on broker restart
@Bean
public Queue sessionQueue() {
    return QueueBuilder.nonDurable("session." + UUID.randomUUID()).build();
}

// Non-durable fanout queue for live dashboard updates
@Bean
public Queue dashboardBroadcastQueue() {
    return QueueBuilder.nonDurable("dashboard.feed")
        .autoDelete()  // cleaned up when last consumer leaves
        .build();
}

Quorum Queues for Stronger Durability

Classic queues persist to one node's disk. Quorum queues replicate writes to a majority of nodes using the Raft protocol, surviving node failures without data loss. Recommended for any business-critical queue in RabbitMQ 3.8+.

Java — quorum queue declaration for HA durability
// Declare a quorum queue (requires RabbitMQ 3.8+)
@Bean
public Queue ordersQuorumQueue() {
    return QueueBuilder.durable("orders.quorum")
        .quorum()  // sets x-queue-type=quorum
        .build();
}

// Spring AMQP QueueBuilder.quorum() sets:
// x-queue-type = quorum
// Replicates to (N/2)+1 nodes; survives minority partition

// Quorum queue limitations vs classic:
// - No priority, per-message TTL, or non-durable option
// - No exclusive queues
// - Higher memory usage per queue

Key Points to Remember

  • 1Durability = queue survives restart (declaration persisted); persistence = message survives restart (delivery-mode=2)
  • 2Both must be set together for full data safety — one without the other still risks data loss
  • 3Transient queues are faster (no disk I/O) and suit ephemeral patterns like RPC reply queues
  • 4Classic durable queues have a brief data-loss window under power failure — quorum queues do not
  • 5Quorum queues (3.8+) use Raft replication across nodes; recommended for business-critical data
  • 6Quorum queues do not support per-message TTL, exclusive, or non-durable configurations

Interview Questions

Sign in to ask Aria
1

What are the two independent durability dimensions in RabbitMQ?

MediumPivotal
2

Can a durable queue lose messages? Under what circumstances?

HardAmazon
3

When would you use a non-durable queue?

EasyTCS
4

What are quorum queues and how do they improve on classic durable queues?

HardZalando
5

What delivery mode must messages have to survive a broker restart?

EasyInfosys

Ask Aria about Durable vs Transient Queues

Your personal AI tutor — ask anything about this concept

Revision Status

Personal Notes

Sign in to save personal notes for this topic.

Discussion

Sign in to join the discussion.

Loading discussion…