【问题标题】:Getting java.net.ConnectException : Connection refused获取 java.net.ConnectException:连接被拒绝
【发布时间】:2013-08-21 19:07:19
【问题描述】:

我为此寻找了关于 SO 的解决方案,但似乎没有一个适用于我的情况。所以这里是: 我有一个需要对第三方域进行服务调用的应用程序。我正在使用泽西客户端进行此服务调用。进行此调用的代码是

ClientResponse resp = resourceWithParams.
                      header("Authorization", getAccessKeyId() + ":" +
                      hmacSha1.toUpperCase()).
                      post(ClientResponse.class,"");

其中resourceWithParams 是球衣网络资源。请注意,即使它是POST,Web 服务也需要一个查询字符串和空正文。这可能是有问题的设计,但这是我们必须解决的问题。

此设置在我的本地计算机以及我们的 preprod 服务器上运行良好。但是在我们的生产服务器上它给出了一个例外:

com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused

以下几点可能有助于为我指明正确的方向:

1) 当我们在 prod 服务器命令行上使用 curl 向 Web 服务发送请求时,我们得到了有效的响应,因此似乎没有防火墙问题。只有当我们通过 Web 应用程序(即使用 jersey 客户端通过 java 代码)尝试时才会发生这种情况。

2) prod 服务器上没有设置代理

3) 在本地主机上工作正常。

4) Rest webservice 使用 https 并且在我们的服务器上安装了正确的证书,这可以通过 curling 在 prod 上的 webservice 工作正常这一事实来证明。

关于问题可能是什么以及我们应该从哪里开始寻找任何想法?

编辑:

如前所述,我们使用 https 连接到网络服务。如果我们改用 http,它似乎确实有效。

【问题讨论】:

  • HTTPS 通常运行在与 HTTP 不同的端口上,即 443 而不是 80。当您使用 curl 测试连接时,您使用 https 吗?

标签: java connection firewall jersey-client


【解决方案1】:

我建议你设置一个tcpdump 会话来查看被拒绝的连接是从哪里来的。尤其要查看成功连接和不成功连接的源 IP 和目标 IP 地址。

上面设计的测试有两种可能性:

  1. 您说您没有使用代理服务器,但 Java 实际上有一个独立于系统其余部分的代理配置,因此可能是您的 Java 配置为使用非功能性代理服务器。
  2. 您的 Java 系统可能使用与您的 curl 正在使用的源 IP 地址不同的源 IP 地址发送请求。

【讨论】:

  • 谢谢。我们的管理员做了一个 tcpdump,它显示请求将发送到 Web 服务提供商的暂存域。重新启动产品服务器解决了这个问题。推测是服务器从不正确的陈旧/缓存属性文件中获取域信息。虽然问题得到解决,但根本原因分析仍在进行中。
  • 这种情况又开始发生了,看起来 url 是正确的。管理员说在发出请求时(来自 UI),他在 tcp 堆栈上看不到任何内容。有任何想法吗?我会得到更多的信息。谢谢。
猜你喜欢
  • 2015-05-18
  • 2018-06-10
  • 2023-03-21
  • 2017-08-10
  • 1970-01-01
  • 2014-11-01
  • 2011-05-12
  • 1970-01-01
相关资源
最近更新 更多