【问题标题】:Store the Disposable when subscribed to a Mono in database订阅数据库中的 Mono 时存储 Disposable
【发布时间】:2018-05-21 09:32:43
【问题描述】:

我目前正在探索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 保存在数据库中吗?是的,我怎样才能保存它。还有没有更好的方法来存储订阅时创建的一次性用品。

【问题讨论】:

  • 这毫无意义。你为什么要这样做?
  • @akarnokd 我想存储它们,以便在需要时处理一些计划任务。为此,我需要将它们存储在某个数据库中。
  • 仍然没有意义。就好像您想将文件句柄存储在数据库中一样。一次性对象指的是内存中的实时流,除非您在内存中保留要存储在数据库中的映射,否则您无法存储它们并调用它们以指向同一个对象...

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


【解决方案1】:

正如@akarnokd 指出的那样,Disposable 只是对实时计算的引用,尝试将其保存到数据库或从数据库中恢复是没有意义的。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-30
    • 2022-01-26
    • 2022-12-22
    • 2015-01-31
    • 1970-01-01
    • 2013-10-24
    • 1970-01-01
    • 2020-10-19
    相关资源
    最近更新 更多