ฉันมีบริการที่ฉันได้ลงทะเบียนการโทรกลับ และตอนนี้ฉันต้องการแสดงเป็น Flowable
โดยมีข้อกำหนด/ข้อจำกัดบางประการ:
- ไม่ควรบล็อกการโทรกลับเพื่อรับเธรด (งานควรถูกส่งต่อไปยังเธรด/ตัวกำหนดเวลาอื่นที่ผู้สังเกตการณ์ระบุ)
- ไม่ควรให้มีข้อยกเว้นใดๆ เนื่องจากผู้บริโภคมีการชะลอตัว
- ผู้บริโภคหลายรายสามารถสมัครสมาชิกได้โดยแยกจากกัน
- ผู้บริโภคสามารถเลือกบัฟเฟอร์รายการทั้งหมดเพื่อไม่ให้รายการใดสูญหาย อย่างไรก็ตาม ไม่ควรบัฟเฟอร์รายการเหล่านั้นในระดับ 'ผู้ผลิต'
ด้านล่างนี้คือสิ่งที่ฉันมีในปัจจุบัน
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);
}
}
ฉันไม่แน่ใจว่าสิ่งนี้ตรงกับความต้องการของฉันจริงหรือไม่ มีหมายเหตุใน onBackpressureLatest
javadoc เกี่ยวกับ observeOn
ที่ฉันไม่เข้าใจ:
โปรดทราบว่าเนื่องจากลักษณะของวิธีการเผยแพร่คำขอแรงดันย้อนกลับผ่าน SubscribeOn/observeOn การร้องขอมากกว่า 1 รายการจากดาวน์สตรีมจึงไม่รับประกันว่าจะมีการส่งมอบเหตุการณ์ onNext อย่างต่อเนื่อง
และฉันมีคำถามอื่น:
- การเรียก
onBackpressureLatest
ทำให้รายการไม่มัลติคาสต์อีกต่อไปหรือไม่ - ฉันจะทดสอบความต้องการของฉันได้อย่างไร?
- โบนัส: หากฉันมีผู้จัดพิมพ์หลายราย (ในชั้นเรียนเดียวกันหรือที่อื่น) วิธีใดคือวิธีที่ดีที่สุดที่จะทำให้รูปแบบเดียวกันนี้สามารถนำมาใช้ซ้ำได้ สร้าง Flowable ของฉันเองด้วยวิธีมอบหมาย/วิธีพิเศษหรือไม่