订阅数据库中的Mono时存储Disposable

时间:2017-12-07 09:59:29

标签: spring rx-java rx-java2 project-reactor

我正在探索reactor-core。我可以订阅Mono并保存一次性用于处理订户的执行。

Mono<Object> task1 = Mono.just("Task1");
Mono<Object> task2 = Mono.just("Task2");
System.out.println(System.currentTimeMillis());
HashMap<Mono,Disposable> taskHandlerMap = new HashMap<>();
Disposable task1Handler = task1.delayElement(Duration.ofSeconds(5)).subscribe(
(Object x)->{
        System.out.println(x.toString() + "\t" + System.currentTimeMillis());
});
taskHandlerMap.put(task1,task1Handler);
Disposable task2Handler = task2.delayElement(Duration.ofSeconds(10)).subscribe(
(Object x)->{
        System.out.println(x.toString() + "\t" + System.currentTimeMillis());
});
taskHandlerMap.put(task2,task2Handler);

我可以使用处理程序映射处理计划任务,如下所示。

taskHandlerMap.get(task2).dispose();

我可以将此taskHandlerMap保存在数据库中吗?是的,我怎么能保存它。否则,有更好的方法来存储订阅时创建的一次性用品。

1 个答案:

答案 0 :(得分:2)

正如@akarnokd所指出的,Disposable仅仅是对实时计算的引用,尝试保存它并将其恢复到数据库中是没有意义的。

有点像是你向ExecutorService提交了一个长HTTP调用,并希望能够将Future保存到数据库并以某种方式恢复它......如果应用程序停止,无论如何,HTTP调用已经消失了。如果应用程序继续运行,则无需将Future保留在数据库中(您将其保留在内存中,与HTTP调用具有相同的生命周期)。