Multiple Subscription এবং Unsubscription

ubscription এবং Disposable - আরএক্সজাভা (RxJava) - Java Technologies

282

RxJava-তে Multiple Subscription এবং Unsubscription গুরুত্বপূর্ণ বিষয়, বিশেষত যখন অ্যাপ্লিকেশন অ্যাসিনক্রোনাস কাজ এবং ডেটা স্ট্রিম পরিচালনা করে। এখানে এই দুইটি বিষয় বিস্তারিতভাবে আলোচনা করা হলো:


Multiple Subscription

RxJava-তে একই Observable-এ একাধিক Observer বা সাবস্ক্রাইবার সংযুক্ত হতে পারে।

উদাহরণ: Multiple Subscription

import io.reactivex.rxjava3.core.Observable;

public class MultipleSubscriptionExample {
    public static void main(String[] args) {
        Observable<String> observable = Observable.just("Hello", "RxJava!");

        // First Subscription
        observable.subscribe(data -> System.out.println("Subscriber 1: " + data));

        // Second Subscription
        observable.subscribe(data -> System.out.println("Subscriber 2: " + data));
    }
}

আউটপুট:

Subscriber 1: Hello  
Subscriber 1: RxJava!  
Subscriber 2: Hello  
Subscriber 2: RxJava!  

Multiple Subscription ব্যবহারের ক্ষেত্রে বিষয়সমূহ:

  1. Cold Observable:
    • প্রতিটি সাবস্ক্রিপশন নতুনভাবে ডেটা স্ট্রিম তৈরি করে।
    • উদাহরণ: Observable.just() বা Observable.fromIterable()
  2. Hot Observable:
    • একই স্ট্রিম সকল সাবস্ক্রাইবার শেয়ার করে।
    • উদাহরণ: PublishSubject, BehaviorSubject
    • Hot Observable ব্যবহার করলে সকল সাবস্ক্রাইবার একই ডেটা পায়।

Unsubscription

RxJava-তে Observer বা সাবস্ক্রাইবার একটি স্ট্রিমে সাবস্ক্রাইব করার পরে সেটি বন্ধ বা unsubscribe করা প্রয়োজন হতে পারে, বিশেষত রিসোর্স লিক এড়াতে।

Disposable:

RxJava Disposable ইন্টারফেস সরবরাহ করে, যা সাবস্ক্রিপশন বন্ধ করার জন্য ব্যবহৃত হয়।

উদাহরণ: Unsubscription

import io.reactivex.rxjava3.core.Observable;
import io.reactivex.rxjava3.disposables.Disposable;

public class UnsubscriptionExample {
    public static void main(String[] args) {
        Observable<Long> observable = Observable.create(emitter -> {
            for (long i = 0; i < 10; i++) {
                if (emitter.isDisposed()) {
                    return; // Stop emitting if unsubscribed
                }
                emitter.onNext(i);
                Thread.sleep(100); // Simulate delay
            }
            emitter.onComplete();
        });

        // Subscribe and get the Disposable
        Disposable disposable = observable.subscribe(
            data -> System.out.println("Received: " + data),
            Throwable::printStackTrace,
            () -> System.out.println("Completed!")
        );

        // Unsubscribe after some time
        try {
            Thread.sleep(300); // Allow some data to emit
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        disposable.dispose(); // Unsubscribe from the observable
        System.out.println("Unsubscribed!");
    }
}

আউটপুট:

Received: 0  
Received: 1  
Received: 2  
Unsubscribed!  

CompositeDisposable for Multiple Subscriptions

RxJava-তে যখন একাধিক Disposable থাকে, তখন তাদের ব্যবস্থাপনার জন্য CompositeDisposable ব্যবহার করা হয়। এটি একসাথে একাধিক সাবস্ক্রিপশন dispose করতে সাহায্য করে।

উদাহরণ: CompositeDisposable

import io.reactivex.rxjava3.core.Observable;
import io.reactivex.rxjava3.disposables.CompositeDisposable;
import io.reactivex.rxjava3.disposables.Disposable;

public class CompositeDisposableExample {
    public static void main(String[] args) {
        CompositeDisposable compositeDisposable = new CompositeDisposable();

        // First Observable
        Observable<String> observable1 = Observable.just("First Observable");
        Disposable disposable1 = observable1.subscribe(data -> System.out.println(data));

        // Second Observable
        Observable<String> observable2 = Observable.just("Second Observable");
        Disposable disposable2 = observable2.subscribe(data -> System.out.println(data));

        // Add to CompositeDisposable
        compositeDisposable.add(disposable1);
        compositeDisposable.add(disposable2);

        // Dispose all subscriptions
        compositeDisposable.dispose();
        System.out.println("All subscriptions disposed!");
    }
}

আউটপুট:

First Observable  
Second Observable  
All subscriptions disposed!  

Unsubscription ব্যবহারের সুবিধা:

  1. মেমোরি লিক প্রতিরোধ:
    সাবস্ক্রিপশন বন্ধ করা না হলে অ্যাপ্লিকেশনে মেমোরি লিক হতে পারে।
  2. রিসোর্স ব্যবস্থাপনা সহজ:
    Disposable বা CompositeDisposable ব্যবহার করে রিসোর্সগুলোর কার্যকর ব্যবস্থাপনা করা যায়।
  3. থ্রেড ম্যানেজমেন্ট সহজ:
    সাবস্ক্রিপশন বন্ধ করলে থ্রেড বা ব্যাকগ্রাউন্ড কাজ বন্ধ হয়।

উপসংহার

RxJava-তে Multiple Subscription এবং Unsubscription ব্যবস্থাপনা সঠিকভাবে করা অত্যন্ত গুরুত্বপূর্ণ। Disposable এবং CompositeDisposable ব্যবহার করলে অ্যাপ্লিকেশন আরও কার্যকর, মেমোরি লিক মুক্ত এবং রিসোর্স ব্যবহারে দক্ষ হয়।

Content added By
Promotion

Are you sure to start over?

Loading...