処理するジョブのバッチがある Java EE アプリケーションがあります。処理には、N 個のリクエストのみを同時に送信できるように制限のある外部サービスの呼び出しが含まれます。このボトルネックは、アプリケーション ロジックに実装する必要があり、どうすればこれを実現できるのでしょうか。幸いなことに、クラスタリングは必須ではないため、問題を 1 つのサーバー インスタンスに限定することができます。
私の最初のアイデアは、オブジェクトがレギュレータとして機能するように、N 個の作業スレッドを持つ
ExecutorServicea に裏打ちされた を使用することです。もちろん、これは EE ソリューションではありません。ThreadPoolThreadPool私の 2 番目のアイデアは、何らかの形
ThreadPoolでコンテナー内でそのような構成を行い、それを使用することですが、これまでのところ、このような機能は見つかりませんでした。3 番目のアイデアは、 EJBで
Semaphore(N)オブジェクトを使用することです。@Singleton4 番目のアイデアは、何らかの方法でステートレス セッション Bean の制限付きプールを作成し、それらに制限付きリソース アクセスを配置することです。Bean 番号はコンテナーで管理されるため、リソースの使用量も制限されます。
(明確にするために:一般的な解決策が最善ですが、Glassfish 3.1.1で実行しており、後でJBoss 6.xで実行していることが知られています)
この問題に適したアーキテクチャを提案したり、私の決定に役立つアイデアについてコメントしたりできますか?