Web サービスをホストする Java でオーケストレーター システムを設計しています。要求に応じて、XML で記述されたフローを呼び出します。これは、次々に実行されるステップにすぎませんが、XML はユーザーにフローが何であるかを伝え、ユーザーはXML を変更してフローを変更することもできます。新しいサービスを追加して、それを XML に追加できます。しかし、設計している間、私は今、次のようなことで混乱しています.
ブロッキング キューを使用してサービスを実行可能にし、エグゼキューターにスケジュールすることでサービスを常に有効にしておく必要があります。これにより、新しいリクエストが到着したときにリクエストがブロッキング キューにプッシュされ、サービスがそれを処理します。そして、異なるサービス間でメッセージ パッシング タスクを実行するメールボックスを作成します。
サービスを実行可能にする代わりに、クラスをシングルトンにするSpring IOCを使用する必要があります。したがって、インスタンスは1つだけになり、リクエストをサービスメソッドに直接送信します。したがって、スレッドがないため、面倒なことはありません。また、メールボックスを実装する必要もありませんでした。
nodejsやngnixのようにイベント駆動型システムがどのように高速であるかについて読んだので、disuptorフレームワークを使用してすべての着信リクエストをリングバッファーにプッシュし、リクエストの処理を開始するオーケストレーターにイベントを発行するハンドラーを作成して、また、オーケストレーターが完了すると、コールバックを使用して呼び出し元に応答を返すように、要求と共にコールバックを送信します。しかし、リクエストは同じタイプではないため、ディスラプター オブジェクトの割り当てを利用することはできません。
システムは、低遅延で最大のスループットを提供する必要があります。システムは、将来的に新しいサービス/フローを XML に追加するため、パフォーマンスに影響を与えずに新しいフローを採用する必要があります。私はJava 7のみを使用でき、Scalaは使用できないため、制限があります。