1

JVM/Tomcat で実行されるアプリケーションがあり、それが実行されるすべてのマシンで IPv6 スタックが有効になっています。IPv4 のみをサポートする別のマシンにリクエストを送信しようとしていますが、JVM は常に IPv6 スタックを優先してこのリクエストを作成します (ApacheHttpClientクラスを使用してリクエストを作成しています)。

プロパティについては知ってい-Djava.net.preferIPv4Stack=trueますが、ここでは説明しませんが、JVM の起動時に渡すことができません。次のようにプログラムで(短期間)設定することさえできません。

System.setProperty("java.net.preferIPv4Stack", "true");

...これは、JVM/Tomcat インスタンスで実行されている他のスレッドに影響を与える可能性があるためです (この質問や他の質問から理解したように)。

問題は、この単一のリクエストを IPv4 スタックを通過させるにはどうすればよいか (IPv4 エンドポイントに接続するだけでなく、IPv4 インターフェースを実際に使用することを意味する) ということです。

curl は JVM をまったく使用しないため、 (exec またはlibcurlバインディングを介して) cURL を使用することを考えました。

他のアイデアはありますか?

4

1 に答える 1

1

Flexoの言及これは有効です!

最終的に、本当の問題は、JVM がリクエストを IPv6 インターフェイスから作成することではなく、プロキシには A DNS エントリしかないため (Flexo が指摘したように)、これは不可能であることに気付きました。

本当の問題は、プロキシ URL のタイプミスであり、JVM がプロキシ ホストを解決できませんでした。私を驚かせたのは、例外が Inet6Address クラスからスローされたという事実でした (おそらく、プロキシが IPv4 のみであるという事実を JVM がまだ認識していなかったためです)。

誤字修正しました!これで、プロキシは適切に解決され、リクエストは IPv4 経由で行われます。ありがとうございました!

于 2013-05-22T13:18:56.173 に答える