我为 POC 创建了一个示例 Web 应用程序。此应用程序在 Amazon EC2 liberty 17.0.0.2 中运行。当我们如下向 servlet 发送 get 请求时,它必须向 AWS SQS 发送消息。
http://localhost:8080/TestSqsWeb/SqsServlet?message=Hello333
我们的 EC2 是合作的 EC2,它需要代理才能连接到互联网。所以我在 liberty 的 jvm.options 文件中提供了代理配置。
-Dhttps.nonProxyHosts=169.254.169.254|localhost|127.0.0.1
-Dhttp.nonProxyHosts=169.254.169.254|localhost|127.0.0.1
-Dhttp.proxyHost=proxy.ebiz.abc.com
-Dhttp.proxyPort=80
-Dhttps.proxyHost=proxy.ebiz.abc.com
-Dhttps.proxyPort=80
它一直在给出以下异常。
org.apache.http.conn.ConnectTimeoutException: Connect to sqs.us-west-2.amazonaws.com:443 [sqs.us-west-2.amazonaws.com/52.119.168.22] failed: connect timed out
经过进一步分析,我发现它在建立连接时没有采用代理系统属性。我使用 System.getProperty 在代码中打印了所有系统属性。它打印我的系统属性,这意味着配置是正确的。
为了进一步分析,我在 tomcat-8 中使用相同的代理配置在相同的 EC2 中部署了相同的应用程序,它正在工作。它能够建立连接并将我的消息发送到 AWS SQS 队列。
经过这次分析,我得出结论,自由存在一些问题。
[我的示例应用程序中的库][1]
[1]: https://i.stack.imgur.com/K2gbj.png
在我发现的一篇文章中,这可能是由于 http-client 的旧版本而发生的,但我使用的是最新的 httpclient-4.5.2.jar 和 httpcore-4.4.4.jar,如您在上面的链接中所见。
有没有人遇到过与 Liberty 17.0.0.2/17.0.0.3 相同的问题?我正在使用 IBM JAVA SDK-8。