【问题标题】:java rest client gets Remotely closed error on connection to kubernetes minikube servicejava rest客户端在连接到kubernetes minikube服务时出现远程关闭错误
【发布时间】:2018-01-12 23:33:11
【问题描述】:

我正在开发一项将在 Kubernetes 中运行的服务。对于此服务的功能测试,我们的测试会将服务部署到在笔记本电脑上运行的 minikube。

在最基本的测试中,java 客户端只是 ping 服务的健康检查端点。 java客户端使用Jersey并简单地创建客户端:

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
..
 private static final Client CLIENT = ClientBuilder.newClient();

The request fails with;
2017-08-04 13:57:55.202 WARNING [PingTest] Remotely closed
2017-08-04 13:57:55.206 INFO [system.err] javax.ws.rs.ProcessingException: Remotely closed
2017-08-04 13:57:55.207 INFO [system.err]     at org.glassfish.jersey.grizzly.connector.GrizzlyConnector.apply(GrizzlyConnector.java:260)
2017-08-04 13:57:55.207 INFO [system.err]     at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:252)
2017-08-04 13:57:55.208 INFO [system.err]     at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:684)
..

但我可以直接在 curl 或 Postman 中调用在 minikube 中运行的相同端点。

三个不同客户端发出的请求基本相同(除了用户代理):

--POSTNAME--
GET /20170101/health HTTP/1.1
cache-control: no-cache
Postman-Token: f899c540-e93a-479b-9e8b-c58e356140d7
User-Agent: PostmanRuntime/6.2.5
Accept: /
Host: localhost:31081
accept-encoding: gzip, deflate
Connection: keep-alive

--CURL--
GET /20170101/health HTTP/1.1
Host: localhost:31081
User-Agent: curl/7.54.0
Accept: /

--JAVA TEST--
GET /20170101/health HTTP/1.1
User-Agent: Jersey/2.24.1 (Async HTTP Grizzly Connector 2.24.1)
Host: localhost:31081
Connection: keep-alive
Accept: /

关于为什么我可以从 curl 或 Postman 访问端点但不能从 java 客户端访问端点的任何想法?

【问题讨论】:

  • 请发布带有可读代码的完整堆栈跟踪
  • 这是堆栈跟踪;
  • 2017-08-04 16:56:17.592 INFO [system.err] javax.ws.rs.ProcessingException:远程关闭 2017-08-04 16:56:17.594 INFO [system.err]在 org.glassfish.jersey.grizzly.connector.GrizzlyConnector.apply(GrizzlyConnector.java:260) 2017-08-04 16:56:17.594 INFO [system.err] at org.glassfish.jersey.client.ClientRuntime.invoke( ClientRuntime.java:252) 2017-08-04 16:56:17.595 INFO [system.err] at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:684) ...
  • 代码刚刚好;导入 javax.ws.rs.client.Client;导入 javax.ws.rs.client.ClientBuilder;导入 javax.ws.rs.client.WebTarget;导入 javax.ws.rs.core.Response;私有静态最终客户端客户端 = ClientBuilder.newClient();响应 r = null;尝试 { r = CLIENT.target(instance.url().path(TestConstants.HEALTH_API) .request() .get(); } catch (Throwable t) { t.printStackTrace(); }

标签: java rest jersey kubernetes minikube


【解决方案1】:

原来是时间问题,有一个回调方法意味着要等到容器进入就绪状态后再调用服务端点,但发现绕过回调的代码路径。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-21
    • 1970-01-01
    • 2020-02-03
    • 1970-01-01
    • 2021-04-07
    • 2023-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多