EventBus を使用して Reactor (2.X) でこのユースケースを達成する方法についての提案をいただければ幸いです。
メイン スレッドは、threadPoolExecutor を使用してトピック「foo」にイベントをディスパッチします。イベントは、「foo」にサブスクライブしたいくつかのコンシューマーに送信される場合があります。これらのコンシューマーは、イベント データを調べて、問題があるかどうかを判断します。
メインスレッドを一時停止して、条件のいずれかが満たされるまで待機させたい:
- すべてのコンシューマがイベントを取得し、実行を終了して問題を検出しません。メインスレッドが実行を再開します
- コンシューマの 1 つが問題を発見すると、メイン スレッドは例外をスローする必要があります
- コンシューマの 1 つで実行に時間がかかりすぎています。メイン スレッドは実行を再開する必要がありますが、警告をログに記録する必要があります
だから何か
// dispatch event to all consumers
notify("foo", event);
// wait on all consumers to either finish or timeout after 100 ms
// consumers are running on X separate threads, doing their analysis
boolean anyErrors = waitOnConsumers(100);
if(anyErrors){
throw new BlockedExecutionException("A problem occurred");
}