2012-05-07 21 views
3

Axis Webサービスでオーバーロードメカニズムを実装したいと考えています。 基本的には、TPS(Transactions Per Second)値が100または150などの指定された値に達すると、SOAP要求の受信を拒否します。 これを行うには、受信した要求の数と送信された応答の数を数える必要があります。Java Axis WebServiceオーバーロードコントロール

この実装を開始する場所を教えてください。リクエストとレスポンスを数えるには?

多くのおかげで、 Sekhar

答えて

1

は、私はあなたがメッセージのカウントを実装し、ハンドラでドロップするべきだと思います。 AxisのWebサービスにハンドラを記述して登録する方法については、Using handlers in JAX-WS Web servicesのドキュメントを参照してください。

基本的には、コードワイズで行うこと:javax.xml.ws.handler.soap.SOAPHandlerを実装するハンドラクラスを作成します。 handleMessage(...)メソッドでは、着信メッセージをカウントし、Javadoc for the Handler interfaceが示すように、オーバーロード制限に達するとfalseを返します。

ご希望の方は、こちらをご覧ください。

+0

私はハンドラを作成し、リクエストフローとレスポンスフローに関連付けました。このハンドラはスレッド数で同時に呼び出されるため、クエリがありますが、カウンタ値をインクリメントまたはデクリメントしながら同期を行う必要がありますか?また、Axisが複数の同時リクエストを処理する方法を教えてください。 – Sekhar

+0

それは私が正確な答えを知らない良い質問です。しかし、原子クラス([AtomicInteger](http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/atomic/AtomicInteger.html)を使用するのは非常に簡単なので例)、私はちょうどそれらの1つを使用することをお勧めします。 – rolve

+0

また、これらのアトミッククラスは、同期(「synchronized」キーワードを使用)と比較して、効率とエラーの可能性の面ではるかに優れた選択肢です。 – rolve