Skip to content

Backpressure

Definition

Backpressure


Strategies

Backpressure Strategies


Implementation Patterns

Implementation Patterns


Code Examples

// Bounded Queue (Java)
BlockingQueue<Task> queue = new ArrayBlockingQueue<>(1000);

// Producer - blocks when full
void produce(Task task) throws InterruptedException {
    queue.put(task);  // Blocks if queue is full
}

// Offer with timeout
boolean success = queue.offer(task, 100, TimeUnit.MILLISECONDS);
if (!success) {
    // Handle backpressure: retry, drop, or reject
}

// Reactive Streams (Project Reactor)
Flux.range(1, 1000000)
    .onBackpressureBuffer(1000)      // Buffer up to 1000
    .onBackpressureDrop()            // Or drop excess
    .onBackpressureLatest()          // Or keep only latest
    .subscribe(
        item -> process(item),
        error -> handleError(error)
    );

// Rate Limiter (Guava)
RateLimiter limiter = RateLimiter.create(100); // 100/second
for (Request req : requests) {
    limiter.acquire();  // Blocks to maintain rate
    process(req);
}

Real-World Examples

Real-World Examples


When to Use

Decision Guide


Tips & Tricks

Tips and Tricks