【发布时间】: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