[AIX HP-UX Linux Solaris Windows]

例: サイド・ストリーム advisor の実装

以下の例では、サイド・ストリーム advisor を実装する方法を 示します。このサンプルでは、advisor の基本によってオープンされる標準ソケットの抑制を具体的に示しています。代わりの方法として、この advisor では、サイド・ストリーム Java ソケットをオープンして サーバーを照会します。通常のクライアント・トラフィックと異なるポートを使用して advisor 照会を listen するサーバーに対しては、このプロシージャーが有効です。

この例の場合、サーバーは、ポート 11999 上で listen しており、照会された時点で 16 進の int 「4」で 負荷値を戻します。このサンプルは、置換モードで実行されます。すなわち、advisor コンストラクターの最終パラメーターが true に 設定されていて、advisor の基本コードでは、経過時間ではなく戻された負荷値が使用されます。

初期化ルーチン内の supressBaseOpeningSocket() に対する呼び出しに注意してください。 データが送信されない場合の基本ソケットの抑制は 不要です。例えば、advisor がサーバーに接続できるかどうかを確認する際に、ソケットのオープンが必要になった場合 などです。この選択を行う前に、アプリケーションに必要なものを入念に調べてください。

package CustomAdvisors;
import java.io.*;
import java.net.*;
import java.util.*;
import java.util.Date;
import com.ibm.internet.lb.advisors.*;
import com.ibm.internet.lb.common.*;
import com.ibm.internet.lb.server.SRV_ConfigServer;

public class ADV_sidea extends ADV_Base implements ADV_MethodInterface { 
  static final String ADV_NAME = "sidea"; 
  static final int ADV_DEF_ADV_ON_PORT = 12345; 
  static final int ADV_DEF_INTERVAL = 7; 

    // create an array of bytes with the load request message
  static final byte[] abHealth = {(byte)0x00, (byte)0x00, (byte)0x00, 
                                  (byte)0x04};
    public ADV_sidea() {
    super(ADV_NAME, "3.0.0.0-03.31.00", ADV_DEF_ADV_ON_PORT,
ADV_DEF_INTERVAL, "", 
                    true);         // replace mode parameter is true
    super.setAdvisor( this );
} 

//-------- 
  // ADV_AdvisorInitialize
public void ADV_AdvisorInitialize() 
  { 
        suppressBaseOpeningSocket();   // tell base code not to open the 
// standard socket 
    return; 
  } 

//-------- 
// getLoad
public int getLoad(int iConnectTime, ADV_Thread caller) { 
    int iRc; 
    int iLoad = ADV_HOST_INACCESSIBLE;    // -1 
    int iControlPort = 11999;             // サーバーとの通信で
                                          // 使用するポート
    String sServer = caller.getCurrentServerId(); // 照会対象のサーバーのアドレス
    try {
socket soServer = new Socket(sServer, iControlPort);  // open socket to 
                                                                                                                         // server
DataInputStream disServer = new DataInputStream( 
                                                      soServer.getInputStream()); 
      DataOutputStream dosServer = new DataOutputStream( 
                                                                                             soServer.getOutputStream());
      int iRecvTimeout = 10000;  // set timeout (in milliseconds)
// for receiving data  
      soServer.setSoTimeout(iRecvTimeout); 
      dosServer.writeInt(4);              // サーバーにメッセージを送信します
      dosServer.flush(); 
      iLoad = disServer.readByte();       // サーバーからの応答を受信します

        } catch (exception e) {
      system.out.println("Caught exception " + e);
} 
        return iLoad;    // return the load reported from the server 
} 
}



関連資料
例: サンプル advisor
参照トピック 参照トピック    

ご利用条件 | フィードバック

最終更新最終更新: Jun 21, 2011 12:49:06 PM EDT
ファイル名: rprf_advexss.html