在数据库中订阅 Mono 时存储 Disposable
Store the Disposable when subscribed to a Mono in database
我目前正在探索 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 指出的那样,Disposable
只是对实时计算的引用,尝试将其保存并恢复到 to/from 数据库是没有意义的。
这有点像如果您向 ExecutorService
提交了一个长的 HTTP 调用并期望能够将 Future
保存到数据库并以某种方式恢复它......如果应用程序停止,HTTP 调用无论如何都消失了。如果应用程序保持 运行,则无需将 Future
保留在数据库中(您将其保留在内存中,与 HTTP 调用具有相同的生命周期)。
我目前正在探索 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 指出的那样,Disposable
只是对实时计算的引用,尝试将其保存并恢复到 to/from 数据库是没有意义的。
这有点像如果您向 ExecutorService
提交了一个长的 HTTP 调用并期望能够将 Future
保存到数据库并以某种方式恢复它......如果应用程序停止,HTTP 调用无论如何都消失了。如果应用程序保持 运行,则无需将 Future
保留在数据库中(您将其保留在内存中,与 HTTP 调用具有相同的生命周期)。