Backpressure
Definition

Strategies

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

When to Use

Tips & Tricks
