Jersey 客户端不等待 GET 方法的结果
Jersey client don't wait for result of GET method
我在 Java 中有一个简单的应用程序,使用 Jersey 进行请求,我在其他应用程序中使用 GET 请求访问其他应用程序中的一些端点,如下所示:
Client client = new Client();
WebResource webResource = client.resource("MY_ENDPOINT");
webResource.get(String.class);
如你所见,我什至不关心端点的结果,我只想'trigger'它,作为端点,一旦它收到调用,它就会运行 自己的一些代码。
我这里的'issue'是我对5个端点做这个操作,他们通常最多需要3秒,我不需要等那么久,因为端点只有returns 一条 'OK' 消息,我不关心实际的消息。
没有'blocking' Java有什么方法可以做这个GET操作吗?如 "do this call and ignore the result"?我想将它与 Jersey 一起保留,但我愿意接受其他方式。
我很久以前就看到 JAX-RS 添加了异步 client/server 工作流(这里是 Jersey 实现的 link):
https://jersey.github.io/documentation/latest/async.html
我没有使用(和测试)它,但我认为你可以尝试类似的东西(考虑像伪代码):
WebTarget target = client.target("http://targetsite/entrypoint");
target.request().async().get(new InvocationCallback<Response>() {
@Override
public void completed(Response response) {
return; //do nothing
}
@Override
public void failed(Throwable throwable) {
System.out.println("Error");
}
});
System.out.println("Immediately here");
请告诉我这是否按预期工作,只是好奇
P.s:我认为,使用这段代码,你的程序仍然会等待响应,但在另一个线程中,你不必在主线程中管理东西,..但是这种复杂性已隐藏。
我刚搬到OkHttp:
Request request = new Request.Builder().url(MY_ENDPOINT).build();
client.newCall(request).enqueue(callback);
并且 callback
变量只是一个空回调。
我在 Java 中有一个简单的应用程序,使用 Jersey 进行请求,我在其他应用程序中使用 GET 请求访问其他应用程序中的一些端点,如下所示:
Client client = new Client();
WebResource webResource = client.resource("MY_ENDPOINT");
webResource.get(String.class);
如你所见,我什至不关心端点的结果,我只想'trigger'它,作为端点,一旦它收到调用,它就会运行 自己的一些代码。
我这里的'issue'是我对5个端点做这个操作,他们通常最多需要3秒,我不需要等那么久,因为端点只有returns 一条 'OK' 消息,我不关心实际的消息。
没有'blocking' Java有什么方法可以做这个GET操作吗?如 "do this call and ignore the result"?我想将它与 Jersey 一起保留,但我愿意接受其他方式。
我很久以前就看到 JAX-RS 添加了异步 client/server 工作流(这里是 Jersey 实现的 link): https://jersey.github.io/documentation/latest/async.html
我没有使用(和测试)它,但我认为你可以尝试类似的东西(考虑像伪代码):
WebTarget target = client.target("http://targetsite/entrypoint");
target.request().async().get(new InvocationCallback<Response>() {
@Override
public void completed(Response response) {
return; //do nothing
}
@Override
public void failed(Throwable throwable) {
System.out.println("Error");
}
});
System.out.println("Immediately here");
请告诉我这是否按预期工作,只是好奇
P.s:我认为,使用这段代码,你的程序仍然会等待响应,但在另一个线程中,你不必在主线程中管理东西,..但是这种复杂性已隐藏。
我刚搬到OkHttp:
Request request = new Request.Builder().url(MY_ENDPOINT).build();
client.newCall(request).enqueue(callback);
并且 callback
变量只是一个空回调。