我正在使用Jersey 2.0使用AsyncInvoker
。这对我来说很好。但是,线程在完成返回后没有结束。请注意,我不希望对我打电话的服务有任何回应。
public Future<Response> fire(WebTarget webTarget) {
Future<Response> response = null;
try {
response = webTarget.request(MediaType.APPLICATION_JSON_TYPE)
.accept(MediaType.APPLICATION_JSON_TYPE)
.headers(headers)
.async().get();
}
catch (Exception e) {
e.printStackTrace();
}
return response;
}
答案 0 :(得分:0)
只要您未对未来值结算时提供给您的实际javax.ws.rs.core.Response
执行任何操作,请求响应流将保持打开状态(与之关联的线程为原始HTTP)请求我猜)。你应该:
javax.ws.rs.core.Response
对象执行某些操作并关闭它(或者它的流)。MyPojo
实例。答案 1 :(得分:0)
您需要关闭在调用方法中创建的client
对象。在调用方法中,您将拥有如下所示的内容 -
Client client = ClientBuilder.newClient();
WebTarget webTarget = client.target(SERVER_URL).path(API_PATH).path(String.valueOf(id));
fire(webTarget);
因此,您需要在调用此方法后关闭client
-
client.close()
但是,建议的关闭client
的方法是在收到回复后。像下面的东西 -
public void fire(WebTarget webTarget) {
try {
webTarget.request(MediaType.APPLICATION_JSON_TYPE)
.accept(MediaType.APPLICATION_JSON_TYPE)
.headers(headers)
.async().get(new InvocationCallback<Response>() {
@Override
public void completed(Response response) {
// Do whatever your wish with response
client.close();
}
@Override
public void failed(Throwable throwable) {
throwable.printStackTrace();
client.close();
}
});
}
catch (Exception e) {
e.printStackTrace();
}
}