একটি Publisher হলো সিকোয়েন্সড এলিমেন্টের অনবウンサー সংখ্যার প্রদানকারী, যা সাবস্ক্রাইবারের পাওয়া ডিমান্ড অনুযায়ী পাবলিশ করে। Publisher<T> ইন্টারফেস টাইপ T-এর এলিমেন্ট পাবলিশ করার জন্য দায়বদ্ধ এবং সাবস্ক্রাইবারের জন্য subscribe() মেথড প্রদান করে যাতে সেগুলো এর সাথে কানেক্ট করতে পারে।
public interface Publisher<T> {
public void subscribe(Subscriber<? super T> s);
}
Publisher ইন্টারফেসের নিয়মাবলী:
- Publisher-দ্বারা Subscriber-কে সিগন্যাল করা মোট onNext() মেথডের সংখ্যা সব সময় Subscriber-এর Subscription-এর অনুরোধ করা মোট এলিমেন্টের সংখ্যা থেকে কম বা সমান হতে হবে।
- একটি Publisher অনুরোধের চেয়ে কম onNext() মেথড সিগন্যাল করতে পারে, এবং onComplete() বা onError() মেথড কল করে Subscription টার্মিনেট করতে পারে।
- onSubscribe(), onNext(), onError(), এবং onComplete() মেথডগুলো যেসব Subscriber-কে সিগন্যাল করা হয়, সেগুলো সিরিয়ালি সিগন্যাল করা উচিত।
- যদি Publisher ফেল করে, তবে এটি অবশ্যই onError() মেথড সিগন্যাল করতে হবে।
- যদি Publisher সফলভাবে টার্মিনেট করে, তবে এটি অবশ্যই onComplete() মেথড সিগন্যাল করতে হবে।
- যদি Publisher onError() বা onComplete() মেথড Subscriber-এ সিগন্যাল করে, তবে Subscriber-এর Subscription অবশ্যই ক্যানসেল করা উচিত।
- একবার টার্মিনাল স্টেট সিগন্যাল হয়ে গেলে (onError(), onComplete()), কোনো ফার্ডার সিগন্যাল ঘটতে পারবে না এটি রিকোয়ার্ড।
- যদি Subscription ক্যানসেল হয়, তবে এর Subscriber অবশ্যই সিগন্যাল করা বন্ধ করবে।
- Publisher.subscribe() মেথড অবশ্যই প্রদত্ত Subscriber-এ onSubscribe() মেথড কল করতে হবে অন্য কোনো সিগন্যালের আগে এবং নরমালি রিটার্ন করতে হবে, এক্সসেপ্ট যখন প্রদত্ত Subscriber null হয়। এই কেসে, এটি অবশ্যই কলারের কাছে NullPointerException থ্রো করতে হবে।
- Publisher.subscribe() মেথড যতগুলো বার ডাকতে পারে প্রতিবার ভিন্ন Subscriber के সাথে।
- একটি Publisher একাধিক Subscriber সাপোর্ট করতে পারে এবং ডিসাইড করতে পারে যে প্রতিটি Subscription ইউনিকাস্ট নাকি মাল্টিকাস্ট।