Configure Prefetch Count¶
PrefetchCount controls how many unacknowledged messages RabbitMQ can deliver to a subscriber.
It is configured through SubscriberBoundDescriptor.
Descriptor¶
var descriptor = new SubscriberBoundDescriptor
{
PrefetchCount = 10,
Queue = new QueueDescriptor
{
Name = "orders.created",
Durable = true
},
Exchange = new ExchangeDescriptor
{
Name = "orders",
Type = ExchangeTypes.Direct,
Durable = true
},
Binder = new BinderDescriptor
{
RoutingKey = "orders.created"
}
};
Runtime Behavior¶
graph LR
RabbitMQ -->|"message 1"| Subscriber
RabbitMQ -->|"message 2"| Subscriber
RabbitMQ -->|"message N"| Subscriber
RabbitMQ will not deliver more than the configured number of unacknowledged messages to the subscriber.
Low Prefetch Count¶
A low value is useful when:
- message processing is expensive;
- each message uses significant memory;
- processing time is unpredictable;
- strict workload distribution is required.
Example:
PrefetchCount = 1
Higher Prefetch Count¶
A higher value is useful when:
- messages are small;
- handlers are fast;
- throughput is more important than fairness;
- processing is mostly I/O bound.
Example:
PrefetchCount = 50
Guidance¶
Start with a conservative value and tune based on:
- processing latency;
- message size;
- handler concurrency;
- memory usage;
- consumer count.