在Observable中发出超时项

时间:2019-01-13 06:31:04

标签: java reactive-programming rx-java2

我有两个PublishSubject,它们为接收和推送作业的队列建模。

我希望能够在给定的时间范围内(例如10s)对第一个PublishSubject消耗掉的工作,而不是第二个PublishSubject消耗的工作做出反应:

final Subject<Job> queue = PublishSubject.<Job>create().toSerialized();
final Subject<Job> done = PublishSubject.<Job>create().toSerialized();
// this is probably wrong already since I am consuming items from queue
queue.subscribe(done::onNext);

final Observable<Job> timeOut = queue.timeout(10, SECONDS, Observable.empty()); // ??

1 个答案:

答案 0 :(得分:0)

您还没有描述10秒钟后您实际想要做什么。 您是否要重新添加该作业以再次排队?如果要花费10秒钟以上的时间来获取信息,还是要花费太长时间就跳过该工作?

如果您想跳过处理该作业并以一些新的可观察到的状态继续进行 您可以flatMap队列的每个元素,分别timeout

Observable<Job> observableThatWillTriggerOnTimeout = ...
queue.flatMap(job -> dispatchJob(job)
                    .timeout(10, TimeUnit.SECONDS, observableThatWillTriggerOnTimeout)
             )

详细介绍您的情况,如有必要,我将更新答案