Настроить Http Proxy для Wildfly 8.1.0
Как настроить HTTP-прокси для Wildfly 8.1? Экземпляр Wildfly работает в автономном режиме на RHEL 6.5. Устройство не имеет прямого доступа к Интернету, но одно из развернутых приложений должно использовать существующий прокси-сервер HTTP (без проверки подлинности) для вызова спокойной службы Google Cloud Messaging. Так или иначе я должен сказать Wildfly или приложению на нем, чтобы сказать, где находится Прокси. Я запускаю / останавливаю экземпляр с помощью скриптов init.d по умолчанию с сервисом wildfly start/stop/restart.
Я уже получил прокси, работающий для экземпляра Tomcat, используя JAVA_OPTS, поэтому я попробовал то же самое для wildfly:
Настройка прокси через JAVA_OPTS в standalone.sh
# Display our environment
echo "========================================================================="
echo ""
echo " JBoss Bootstrap Environment"
echo ""
echo " JBOSS_HOME: $JBOSS_HOME"
echo ""
echo " JAVA: $JAVA"
echo ""
echo " JAVA_OPTS: $JAVA_OPTS"
echo ""
echo "========================================================================="
echo ""
JAVA_OPTS="$JAVA_OPTS -Dhttp.proxyHost=myproxy -Dhttp.proxyPort=3128 -Dhttps.proxyHost=myproxy -Dhttps.proxyPort=3128"
while true; do
if [ "x$LAUNCH_JBOSS_IN_BACKGROUND" = "x" ]; then
# Execute the JVM in the foreground
eval \"$JAVA\" -D\"[Standalone]\" $JAVA_OPTS \
\"-Dorg.jboss.boot.log.file=$JBOSS_LOG_DIR/server.log\" \
\"-Dlogging.configuration=file:$JBOSS_CONFIG_DIR/logging.properties\" \
-jar \"$JBOSS_HOME/jboss-modules.jar\" \
-mp \"${JBOSS_MODULEPATH}\" \
org.jboss.as.standalone \
-Djboss.home.dir=\"$JBOSS_HOME\" \
-Djboss.server.base.dir=\"$JBOSS_BASE_DIR\" \
"$SERVER_OPTS"
JBOSS_STATUS=$?
else
# Execute the JVM in the background
eval \"$JAVA\" -D\"[Standalone]\" $JAVA_OPTS \
\"-Dorg.jboss.boot.log.file=$JBOSS_LOG_DIR/server.log\" \
\"-Dlogging.configuration=file:$JBOSS_CONFIG_DIR/logging.properties\" \
-jar \"$JBOSS_HOME/jboss-modules.jar\" \
-mp \"${JBOSS_MODULEPATH}\" \
org.jboss.as.standalone \
-Djboss.home.dir=\"$JBOSS_HOME\" \
-Djboss.server.base.dir=\"$JBOSS_BASE_DIR\" \
"$SERVER_OPTS" "&"
JBOSS_PID=$!
Сервер загружается без ошибок и запуска ps aux дает мне экземпляр wildfly с правильно установленной JAVA_OPTS.
Прокси настроен правильно и работает, например, с curl:
Однако в приложении, которое развернуто на wildfly и пытается вызвать веб-службу GCM, я все еще получаю исключение ConnectionException:
java.net.ConnectException: Connection timed out
at java.net.PlainSocketImpl.socketConnect(Native Method) [rt.jar:1.7.0_65]
2 ответа
Эту проблему можно решить, настроив прокси не глобально для сервера приложений, а в исходном коде, выполняющем запросы REST для GCM:
//this is your request-body, as byte-array
byte[] body;
URL url = new URL("https://android.googleapis.com/gcm/send");
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("proxy-host.com", 3128));
URLConnection con = url.openConnection(proxy);
HttpURLConnection con1 = (HttpURLConnection) con;
con1.setRequestMethod("POST");
con1.setRequestProperty("Content-type", "application/json");
con1.setDoOutput(true);
con1.setUseCaches(false);
con1.setFixedLengthStreamingMode(body.length);
OutputStream out = con1.getOutputStream();
try {
out.write(body);
} finally {
out.close();
}
У вас есть механизм повтора? Если нет, вы можете просмотреть документацию об объяснениях ошибок. Вы можете попробовать шаги тайм-аута. Посмотри, работает ли это. Это может быть проблема с использованием прокси без аутентификации.