Backpressure is the ability of a Subscriber to signal the Publisher how many data items it can handle at a time. This prevents the Publisher from overwhelming the Subscriber with more data than it can process.
request(5).import org.reactivestreams.*;
public class ReactiveStreamsExample {
public static void main(String[] args) {
Publisher<Integer> publisher = subscriber -> {
subscriber.onSubscribe(new Subscription() {
@Override
public void request(long n) {
for (int i = 1; i <= n; i++) {
if (i > 10) {
subscriber.onComplete();
return;
}
subscriber.onNext(i);
}
}
@Override
public void cancel() {
System.out.println("Subscription canceled");
}
});
};
Subscriber<Integer> subscriber = new Subscriber<>() {
@Override
public void onSubscribe(Subscription subscription) {
System.out.println("Subscribed");
subscription.request(5); // Request 5 items
}
@Override
public void onNext(Integer item) {
System.out.println("Received: " + item);
}
@Override
public void onError(Throwable throwable) {
System.err.println("Error: " + throwable.getMessage());
}
@Override
public void onComplete() {
System.out.println("Complete");
}
};
publisher.subscribe(subscriber);
}
}?
Subscribed
Received: 1
Received: 2
Received: 3
Received: 4
Received: 5
Complete?