Skip to content

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.