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