クライアントが提供する一連のイベントシンクを管理し、それぞれが独自のイベントストリームにサブスクライブしています。通常、各シンクはデータを独自のネットワークパイプにプッシュします。つまり、イベントをシンクにプッシュする際に悪用可能な同時実行性があります。同時に、適切なイベントの順序を確認する必要があります。これは素朴なアプローチです。
final Set<Sink> sinks = new HashSet<>();
final ExecutorService pool = Executors.newCachedThreadPool();
eventSource.addListener(new SourceListener() {
public void sourceEvent(final Event event) {
final Sink sink = resolveSink(sinks, event);
pool.submit(new Runnable() { public void run() { sink.accept(event); }});
}});
これは適切な順序を保証するものではありません。スレッドプールが各イベントキューを単一のスレッドに関連付け、accept-eventタスクをその特定のスレッドのタスクキューにディスパッチした場合、これは堅牢になります。基本的なアイデアや実行可能なアプローチのスケッチを探しています。