2

処理するジョブのバッチがある Java EE アプリケーションがあります。処理には、N 個のリクエストのみを同時に送信できるように制限のある外部サービスの呼び出しが含まれます。このボトルネックは、アプリケーション ロジックに実装する必要があり、どうすればこれを実現できるのでしょうか。幸いなことに、クラスタリングは必須ではないため、問題を 1 つのサーバー インスタンスに限定することができます。

  • 私の最初のアイデアは、オブジェクトがレギュレータとして機能するように、N 個の作業スレッドを持つExecutorServicea に裏打ちされた を使用することです。もちろん、これは EE ソリューションではありません。ThreadPoolThreadPool

  • 私の 2 番目のアイデアは、何らかの形ThreadPoolでコンテナー内でそのような構成を行い、それを使用することですが、これまでのところ、このような機能は見つかりませんでした。

  • 3 番目のアイデアは、 EJBでSemaphore(N)オブジェクトを使用することです。@Singleton

  • 4 番目のアイデアは、何らかの方法でステートレス セッション Bean の制限付きプールを作成し、それらに制限付きリソース アクセスを配置することです。Bean 番号はコンテナーで管理されるため、リソースの使用量も制限されます。

(明確にするために:一般的な解決策が最善ですが、Glassfish 3.1.1で実行しており、後でJBoss 6.xで実行していることが知られています)

この問題に適したアーキテクチャを提案したり、私の決定に役立つアイデアについてコメントしたりできますか?

4

2 に答える 2

1

Java EE での並行メッセージ処理の標準的な解決策は、MDB を使用することです。MDB プール サイズを制限することで、同時に実行するタスクの数を制限できます。

于 2013-04-17T13:49:01.540 に答える
1

Worksを使ってみませんか?JBoss および Weblogic で Works を使用する方法の概要については、こちらを参照してください。Glasshfish については知りません。調査はあなたに任せます ;)
要するに、Works は EE 準拠のスレッドです。

于 2013-04-17T13:34:35.663 に答える