2

EventBus を使用して Reactor (2.X) でこのユースケースを達成する方法についての提案をいただければ幸いです。

メイン スレッドは、threadPoolExecutor を使用してトピック「foo」にイベントをディスパッチします。イベントは、「foo」にサブスクライブしたいくつかのコンシューマーに送信される場合があります。これらのコンシューマーは、イベント データを調べて、問題があるかどうかを判断します。

メインスレッドを一時停止して、条件のいずれかが満たされるまで待機させたい:

  1. すべてのコンシューマがイベントを取得し、実行を終了して問題を検出しません。メインスレッドが実行を再開します
  2. コンシューマの 1 つが問題を発見すると、メイン スレッドは例外をスローする必要があります
  3. コンシューマの 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");
}
4

0 に答える 0