Flow API পরিচিতি
Flow API জাভা ৯-এ Reactive Streams স্পেসিফিকেশনের সাথে মিল রেখে তৈরি করা হয়েছে, যা একটি ডিফ্যাক্টো স্ট্যান্ডার্ড। এতে অ্যাসিনক্রোনাস পাবলিকেশন এবং সাবস্ক্রিপশনের মূল ধারণা ধারণকারী ন্যূনতম ইন্টারফেস সমূহ রয়েছে।
Flow API-এর মূল ইন্টারফেসসমূহ
1) Flow.Publisher
এটি সাবস্ক্রাইবারের জন্য আইটেম প্রডিউস করে এবং শুধু একটি মেথড রয়েছে: subscribe(Subscriber)।
void subscribe(Flow.Subscriber<? super T> subscriber)
2) Flow.Subscriber
এটি পাবলিশারকে সাবস্ক্রাইব করে (সাধারণত একটি) আইটেম গ্রহণ করতে (onNext(T)), এরর মেসেজ (onError(Throwable)), বা আর আইটেম না থাকার সিগন্যাল (onComplete())। এর আগে পাবলিশার onSubscription(Subscription) মেথড কল করে।
void onSubscribe(Flow.Subscription subscription) void onNext(T item) void onError(Throwable throwable) void onComplete()
3) Flow.Subscription
এটি একক পাবলিশার এবং একক সাবস্ক্রাইবার-এর সংযোগ। সাবস্ক্রাইবার এটি ব্যবহার করে আরও আইটেম অনুরোধ করতে পারে (request(long)) বা সংযোগ ভাঙতে পারে (cancel())।
void request(long n) void cancel()
Flow API এক্সিকিউশনের ধাপাবলী
- প্রথমে একটি Publisher এবং একটি Subscriber তৈরি করতে হবে।
- Publisher::subscribe দিয়ে সাবস্ক্রাইবারকে সাবস্ক্রাইব করুন।
- পাবলিশার একটি Subscription তৈরি করে এবং Subscriber::onSubscription কল করে, যাতে সাবস্ক্রাইবার সাবস্ক্রিপশন সংরক্ষণ করতে পারে।
- কোনো সময় সাবস্ক্রাইবার Subscription::request কল করে আইটেমের সংখ্যা অনুরোধ করে।
- পাবলিশার Subscriber::onNext কল করে আইটেম হস্তান্তর শুরু করে। এটি অনুরোধকৃত আইটেমের চেয়ে বেশি পাবলিশ করে না।
- পাবলিশার কোনো সময় সমস্যায় পড়লে Subscriber::onComplete বা Subscriber::onError কল করতে পারে।
- সাবস্ক্রাইবার বায়ে বায়ে আরও আইটেম অনুরোধ করতে পারে বা Subscription::cancel কল করে সংযোগ কাটতে পারে।