2017-01-16 9 views
3

の背後にあるサーバのIP住所を取得し、私は以下のようにホスト名を使用して、クライアントからサーバーに接続しています: -のJava:DNSロードバランサ

HttpPost post = new HttpPost(serverUrl); 
    post.setEntity(new StringEntity(jsonRequestString, ContentType.APPLICATION_JSON)); 
    HttpResponse response = httpClient.execute(post); 
    int ret = response.getStatusLine().getStatusCode(); 

私はorg.apache.http.*パッケージを使用しています。これで、サーバーはDNSロードバランサの背後にあり、8つの一意のIPアドレスがホスト名にバインドされています。しかし、私は、JVMの一回の実行ですべての要求が同じIPアドレスに向かうと考えています。

  1. DNS解決後に返された実際のIPを印刷する方法はありますか?
  2. JVMはローカルDNSキャッシュを実行しますか?

編集:0としてnetworkaddress.cache.ttlnetworkaddress.cache.negative.ttlを設定

が機能していません。私はそれらを正しく設定していません。

public static void main(String[] args) throws Exception { 
    java.security.Security.setProperty("networkaddress.cache.ttl", "0"); // no 
    // cache 
    java.security.Security.setProperty("networkaddress.cache.negative.ttl", "0"); // no 
    while (true) { 
     System.out.println(InetAddress.getByName("google.com")); 
     Thread.sleep(100); 
    } 

}

出力:

google.com/216.58.197.78 
google.com/216.58.197.78 
google.com/216.58.197.78 
google.com/216.58.197.78 
google.com/216.58.197.78 
google.com/216.58.197.78 
google.com/216.58.197.78 
google.com/216.58.197.78 
google.com/216.58.197.78 
google.com/216.58.197.78 
google.com/216.58.197.78 
........ 
........ 
+0

お使いのオペレーティングシステムは、JVMのコントロールの外にあるにもキャッシュすることがあります。 –

+0

すでに毎秒pingで確認済みです。毎回異なるipsにpingしています –

+0

@MangatRaiModi:ICMP pingは、すべての往復のためにホスト名をIPに解決しませんでした。だから私は、RR DNSのロードバランサの代わりに、あなたは何か他のものを持っていると思います(例えば、LLCPやボンディングを使っているネットワークロードバランサ...) – rkosegi

答えて

2

実際のIPはDNSの解決後に返さ印刷する方法はありますか?

あなたはロガーを設定し、ログメッセージをチェックしようとすることができる "org.apache.http.impl.conn.HttpClientConnectionOperator"

Reference

からないJVMは、ローカルDNSキャッシュしていますか?

それは構成によって異なりますが、おそらくはい、これらの設定を確認してください:ネームサービスから成功したネーム参照のキャッシュポリシーを示すために、java.securityで指定

networkaddress.cache.ttl この値は、成功したルックアップをキャッシュする秒数を示す整数として指定されます。

-1の値は、「永遠にキャッシュする」ことを示します。デフォルトの動作では、セキュリティマネージャがインストールされている場合は永遠にキャッシュし、セキュリティマネージャがインストールされていない場合は実装固有の時間キャッシュします。

networkaddress.cache.negative.ttl(デフォルト:10)ネームサービスから未成功名検索用のキャッシュポリシーを示すために、java.securityで指定 ..値を示すために、整数として指定されています失敗したルックアップの失敗をキャッシュする秒数。

値0は、「キャッシュしない」ことを示します。 -1の値は「永遠にキャッシュする」ことを示します。

Reference

UPDATE

あなたはすべてのIPアドレスにホスト名を解決するために、直接APIを呼び出そうとしましたか? javadocsから

InetAddress.getAllByName(host) 

は、ホスト名を指定すると、システムに設定されているネームサービスに をベースにそのIPアドレスの配列を返します。またinteresting article on this topic(自分で試していない)

+0

恐ろしく、私は今これを試してみます。 –

+0

ごめんなさい。ドメイン名からIPアドレスを印刷するための基本的なプログラムを書いた。 –

+0

@MangatRaiModiを参照してください:更新 – rkosegi

関連する問題