2012-04-10 3 views
3

私たちのアプリケーションの1つは、メッセージキューから要求を受け取り、すべての要求に対して電話呼び出しをダイヤルします。Java EE環境でリクエストスロットリングを実装するにはどうすればよいですか?

通話のダイヤルには2つのテレフォニーシステムがあります。 1つは、パラレルコールでは秒単位で開始できるコール数に制限があり、他のシステムでは、任意の時点でアクティブにできる同時コールの制限があります。

以降の要件は、Java EEレイヤーで、定義済みの数のMDBを持つメッセージキューに制限を超えないようにすることで処理されます。

Java EEレイヤ(weblogic 10.3)で最初の制限(コールの開始)をどのように実装すればよいですか?

+0

2つの質問:1.メッセージの順序は重要ですか? 2.クラスタ環境(JVMごとにMDBプールが存在する)をサポートしますか? – home

+0

メッセージの順序付けは、ある程度は重要です(20分の時間切れまでの任意の順序でのプロセス)。私はクラスタリングをサポートする必要はありません。 – Kannan

答えて

0

私が思いつく唯一のアイデアは、開始制限に等しい数のMDBを持ち、コールの開始後1秒間スリープ状態にしてから次のメッセージを受信することです。

キュープロバイダでそれを行う方法がありますが、それは必ずしもJMS経由で利用できるわけではありません。ドキュメントをチェックする必要があります。

+0

ありがとうございます。参加システムには2つの制約があります.1つはコール開始(1秒に2つのコール)で、もう1つは最大パラレルコール(100コールはいつでも)で、MDBを最大パラレルコール呼出し開始までの数を減らす最大スループットは、リソースの利用率を下回る結果となる。 – Kannan

+0

私の提案では、あなたは2つのMDBを開始するでしょう。それぞれがコールを開始し、1秒間スリープします。 1秒に2を超えることは決してありません。 –

+0

このようにしてみましょう。私のアプリケーションは、キューを介してメッセージを受信し、受け取った各msgの呼び出しをダイヤルする必要があります。テレフォニーシステムでは、いつでもアクティブなコールの数に制限はありませんが、コールの開始には制限があります。たとえば、1秒間に2つのコールしか開始できませんが、一度開始されるとアクティブなコールをいくつでも持つことができます。 MDBを2に制限することで、システムの容量が制限されます。私は、J2EEの環境で使用するための安全なソリューションを探しています。助けてください(MDBは、10秒から200秒の範囲で可能な通話の有効期間を通じてアクティブになります) – Kannan