SubmissionPublisher अवलोकन
Java 9 से, हम चार कोर इंटरफेसेस पेश करके रिएक्टिव स्ट्रीम्स बना सकते हैं: Publisher, Subscriber, Subscription, Processor, और एक ठोस क्लास: SubmissionPublisher जो Publisher इंटरफेस को कार्यान्वित करता है। प्रत्येक इंटरफेस रिएक्टिव स्ट्रीम्स के सिद्धांतों से मेल खाते हुए एक अलग भूमिका निभाता है। हम SubmissionPublisher क्लास के submit() मेथड का उपयोग करके प्रत्येक सब्सक्राइबर को प्रदान किए गए आइटम को प्रकाशित कर सकते हैं।
सिंटैक्स
public class SubmissionPublisher<T> extends Object implements Flow.Publisher<T>, AutoCloseable
उदाहरण: एकाधिक सब्सक्राइबर्स के साथ
import java.util.concurrent.Flow.Subscriber;
import java.util.concurrent.Flow.Subscription;
import java.util.concurrent.SubmissionPublisher;
class MySubscriber<T> implements Subscriber<T> {
private Subscription subscription;
private String name;
public MySubscriber(String name) { this.name = name; }
@Override public void onComplete() { System.out.println(name + ": onComplete"); }
@Override public void onError(Throwable t) { System.out.println(name + ": onError"); t.printStackTrace(); }
@Override public void onNext(T msg) { System.out.println(name + ": " + msg.toString() + " received in onNext"); subscription.request(1); }
@Override public void onSubscribe(Subscription subscription) { System.out.println(name + ": onSubscribe"); this.subscription = subscription; subscription.request(1); }
}
public class FlowTest {
public static void main(String args[]) {
SubmissionPublisher<String> publisher = new SubmissionPublisher<>();
MySubscriber<String> subscriber = new MySubscriber<>("Mine");
MySubscriber<String> subscriberYours = new MySubscriber<>("Yours");
MySubscriber<String> subscriberHis = new MySubscriber<>("His");
MySubscriber<String> subscriberHers = new MySubscriber<>("Her");
publisher.subscribe(subscriber);
publisher.subscribe(subscriberYours);
publisher.subscribe(subscriberHis);
publisher.subscribe(subscriberHers);
publisher.submit("One");
publisher.submit("Two");
publisher.submit("Three");
publisher.submit("Four");
publisher.submit("Five");
try { Thread.sleep(1000); } catch(InterruptedException e) { e.printStackTrace(); }
publisher.close();
}
}
आउटपुट (आंशिक)
Yours: onSubscribe
His: onSubscribe
Mine: onSubscribe
His: One received in onNext
Yours: One received in onNext
...
Yours: onComplete
His: onComplete
Mine: onComplete
Her: onComplete
SubmissionPublisher रिएक्टिव स्ट्रीम्स में एक मानक, सरल पब्लिशर कार्यान्वयन प्रदान करता है।