Saya memiliki layanan yang telah saya daftarkan panggilan baliknya, dan sekarang saya ingin mengeksposnya sebagai Flowable
dengan persyaratan/batasan tertentu:
- Callback penerima thread tidak boleh diblokir (pekerjaan harus diserahkan ke thread/penjadwal berbeda yang ditentukan oleh pengamat)
- Seharusnya tidak ada pengecualian karena konsumen memperlambat arus
- Beberapa konsumen dapat berlangganan secara independen satu sama lain
- konsumen dapat memilih untuk melakukan buffering pada semua item sehingga tidak ada satu pun yang hilang, namun item tersebut tidak boleh di-buffer di kelas 'produsen'
Di bawah ini adalah apa yang saya miliki saat ini
class MyBroadcaster {
private PublishProcessor<Packet> packets = PublishProcessor.create();
private Flowable<Packet> backpressuredPackets = packets.onBackpressureLatest();
public MyBroadcaster() {
//this is actually different to my exact use but same conceptually
registerCallback(packets::onNext);
}
public Flowable<Packet> observeAllPacketsOn(Scheduler scheduler) {
return backpressuredPackets.observeOn(scheduler);
}
}
Saya tidak yakin apakah ini benar-benar sesuai dengan kebutuhan saya. Ada catatan di onBackpressureLatest
javadoc tentang observeOn
yang saya tidak mengerti:
Perhatikan bahwa karena sifat bagaimana permintaan tekanan balik disebarkan melalui subscribeOn/observeOn, meminta lebih dari 1 dari downstream tidak menjamin pengiriman kejadian onNext secara berkelanjutan
Dan saya punya pertanyaan lain:
- Apakah panggilan
onBackpressureLatest
membuat item tidak lagi multicast? - Bagaimana cara menguji persyaratan saya?
- Bonus: Jika saya memiliki beberapa penerbit seperti itu (di kelas yang sama atau di tempat lain), apa cara terbaik untuk membuat pola yang sama dapat digunakan kembali. Buat Flowable saya sendiri dengan metode delegasi/ekstra?