1

如何为 Wildfly 8.1 配置 HTTP 代理?Wildfly 实例在 RHEL 6.5 上独立运行。该机器无法直接访问互联网,但其中一个已部署的应用程序应使用现有的 HTTP 代理(无需身份验证)来调用 Google Cloud Messaging RESTful 服务。所以我必须以某种方式告诉 Wildfly 或它上面的应用程序来告诉代理在哪里。我正在通过默认的 init.d 脚本和 service wildfly start/stop/restart 启动/停止实例。

我已经使用 JAVA_OPTS 让代理为 Tomcat 实例工作,所以我对 wildfly 进行了同样的尝试:

在standalone.sh 中通过JAVA_OPTS 设置代理

# 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 为我提供了正确设置 JAVA_OPTS 的 wildfly 实例。 ps辅助输出

代理配置正确并且可以正常工作,例如使用 curl: 卷曲示例

但是,在 Wildfly 上部署并尝试调用 GCM Webservice 的应用程序中,我仍然收到 ConnectionException:

java.net.ConnectException: Connection timed out
        at java.net.PlainSocketImpl.socketConnect(Native Method) [rt.jar:1.7.0_65]
4

2 回答 2

1

可以通过不为应用程序服务器全局设置代理来解决问题,而是在针对 GCM 执行 REST 请求的源代码中:

//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();
}
于 2015-01-12T15:54:16.830 回答
0

你有重试机制吗?如果没有,您可以阅读有关错误说明的文档。您可以尝试超时步骤。看看这是否有效。使用未经身份验证的代理可能会出现问题。

于 2015-01-08T02:11:06.667 回答