2017-12-07 4 views
0

私は現在reactor-coreを探しています。私はMonoを購読することができ、購読者の実行を処理するために使い捨てを保存することもできます。データベースに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をデータベースに保存できますか?はい、どうすれば保存できますか?そうでなければ、サブスクリプションで作成された使い捨て品を保管する良い方法があります。

+0

これは意味をなさない。なぜあなたはそれをしたいのですか? – akarnokd

+0

@akarnokd必要に応じてスケジュールされたタスクを処分できるように、それらを保存したいと思います。そのために私はそれらをいくつかのデータベースに保存する必要があります。 –

+0

まだ理にかなっていません。データベースにファイルハンドルを格納する場合と同様です。使い捨てのオブジェクトはメモリ内のライブフローを参照するため、データベースに保存したいマップをメモリに保持しない限り、それらを保存して同じオブジェクトを指すように呼び出す方法はありません。 – akarnokd

答えて

2

@akarnokdが指摘するように、Disposableは実際の計算の参照に過ぎず、試して保存してデータベースとの間で復元するのは意味がありません。

ExecutorServiceに長いHTTPコールを送信し、FutureをDBに保存して何らかの形でそれを復元できるとしたらどうでしょう...アプリケーションが停止すると、HTTPコールはとにかく消えてしまいます。アプリケーションが稼働し続けている場合は、FutureをDBに保存する必要はありません(HTTP呼び出しと同じ寿命でメモリに保存しておきます)。

関連する問題