Reactive Streams এবং Subscriber
Java 9 রিয়েক্টিভ স্ট্রিমস সাপোর্টের জন্য কিছু ইন্টারফেস এবং ক্লাস পরিচিত করে: Publisher, Subscriber, Subscription, এবং SubmissionPublisher ক্লাস (যে Publisher ইমপ্লিমেন্ট করে)। প্রতিটি ইন্টারফেস রিয়েক্টিভ স্ট্রিমসের নীতির অনুযায়ী ভিন্ন ভূমিকা পালন করে।
আমরা Subscriber ইন্টারফেস ব্যবহার করে পাবলিশার দ্বারা প্রকাশিত ডেটা সাবস্ক্রাইব করতে পারি। Subscriber ইন্টারফেস ইমপ্লিমেন্ট করে এর অ্যাবস্ট্র্যাক্ট মেথডগুলো ইমপ্লিমেন্ট করতে হয়।
Flow.Subscriber ইন্টারফেসের মেথডসমূহ
- onComplete(): পাবলিশার অবজেক্ট তার ভূমিকা পুরা করলে এই মেথড কল হয়।
- onError(): পাবলিশারে কিছু সমস্যা হলে সাবস্ক্রাইবারকে নোটিফাই করতে এই মেথড কল হয়।
- onNext(): পাবলিশার নতুন তথ্য সাবস্ক্রাইবারদের নোটিফাই করলে এই মেথড কল হয়।
- onSubscribe(): পাবলিশার সাবস্ক্রাইবার যোগ করলে এই মেথড কল হয়।
উদাহরণ: Subscriber ইমপ্লিমেন্টেশন
import java.util.concurrent.Flow;
import java.util.concurrent.SubmissionPublisher;
import java.util.stream.IntStream;
public class SubscriberImplTest {
public static class Subscriber implements Flow.Subscriber<Integer> {
private Flow.Subscription subscription;
private boolean isDone;
@Override
public void onSubscribe(Flow.Subscription subscription) {
System.out.println("Subscribed");
this.subscription = subscription;
this.subscription.request(1);
}
@Override
public void onNext(Integer item) {
System.out.println("Processing " + item);
this.subscription.request(1);
}
@Override
public void onError(Throwable throwable) {
throwable.printStackTrace();
}
@Override
public void onComplete() {
System.out.println("Processing done");
isDone = true;
}
}
public static void main(String args[]) throws InterruptedException {
SubmissionPublisher<Integer> publisher = new SubmissionPublisher<>();
Subscriber subscriber = new Subscriber();
publisher.subscribe(subscriber);
IntStream intData = IntStream.rangeClosed(1, 10);
intData.forEach(publisher::submit);
publisher.close();
while(!subscriber.isDone) {
Thread.sleep(10);
}
System.out.println("Done");
}
}
আউটপুট
Subscribed Processing 1 Processing 2 Processing 3 Processing 4 Processing 5 Processing 6 Processing 7 Processing 8 Processing 9 Processing 10 Processing done Done