Queue Type
RabbitMQ supports multiple queue types. Choosing the right one is important for performance and reliability.
- Classic Queue → Default type, very fast, best for simple job queues.
- Quorum Queue → Safer, replicated with Raft algorithm, best for HA (High Availability).
- Stream Queue → New type for event streaming and replay, similar to Kafka.
Go Example: Classic Queue (default)
q, err := ch.QueueDeclare(
"classic_queue", // name
true, // durable
false, // autoDelete
false, // exclusive
false, // noWait
nil, // arguments (empty = classic)
)
if err != nil {
log.Fatal(err)
}
Go Example: Quorum Queue
args := amqp.Table{
"x-queue-type": "quorum",
}
q, err := ch.QueueDeclare(
"quorum_queue",
true,
false,
false,
false,
args,
)
if err != nil {
log.Fatal(err)
}
Go Example: Stream Queue
args := amqp.Table{
"x-queue-type": "stream",
}
q, err := ch.QueueDeclare(
"stream_queue",
true,
false,
false,
false,
args,
)
if err != nil {
log.Fatal(err)
}
Comparison
| Queue Type | Strength | Best Use Case |
|---|---|---|
| Classic | Fast, simple | Default microservice tasks |
| Quorum | HA, Raft-based | Reliable, fault-tolerant job queues |
| Stream | Replay, high volume | Analytics, logs, event pipelines |
Message Size and Pattern
- Keep messages small
- Large messages slow down throughput.
- If you need to send big data, store it elsewhere (e.g., S3) and send a reference.
- Batch messages
- Combine small messages into a batch for higher throughput.
- Routing patterns
- Complex routing (like topic with wildcards) is slower than direct queues.
- If speed is critical, use simple routing.
Category: RabbitMQ
