具有多个调度程序链的可观察队列:是否存在现有解决方案?

时间:2016-03-14 13:43:39

标签: java concurrency rx-java reactive-programming

我需要一个具有以下属性的可观察队列:

  • Observables一个接一个地连续执行
  • Observable可以随时添加到队列 - 动态
  • Observable可以在添加到队列之前附加多个订阅者,并且这些订阅者必须接收onNext / onError个来电
  • Observable可以代表一个复杂的运营商链,它可能包含http请求,数据库操作等 - 每个都在自己的调度程序上运行

那就是我有这样的想法:

Observable<?> observable1 = createObservable1()
  .flatMap(v -> executeHttpCall().subscribeOn(HttpScheduler.getInstance()))
  .flatMap(data -> saveToDatabase(data).subscribeOn(Schedulers.io())
  .delay(3000, TimeUnit.MILLISECONDS);

// external subscription
observable1
  .subscribe(v -> println("observable1 finished"));

Observable<?> observable2 = createObservable2()
observable2.subscribe(v -> println("observable2 finished"));

ObservableQueue.add(observable1); // <- execution starts immediately (queue is empty)
// 1 second later from other part of the code:
ObservableQueue.add(observable2); // <- execution waits for observable1 to complete and then launches

// expected output: 
// observable1 finished
// observable2 finished

我已经在StackOverflow上看到了使用Executors.newSingleThreadExecutor()的建议,但在这种情况下这并没有帮助,因为它没有处理在几个不同调度程序上工作的良好可观察链。这确实让我感到担忧,因为例如observable1可能会向DB写入内容,而observable2会在数据需要存在的位置添加 - 所以我想确保执行的序列顺序整个链

我写了一个simple implementation这个与协调发生使用主题(顺便说一下,非常欢迎反馈),但我想问是否有人知道一个现有的解决方案,我可以使用而不是发明我自己的。

0 个答案:

没有答案