我有一个使用Java编写的简单应用程序,使用Jersey来处理请求,在新泽西州我使用GET请求在其他应用程序中命中了一些端点,如下所示:
Client client = new Client();
WebResource webResource = client.resource("MY_ENDPOINT");
webResource.get(String.class);
如您所见,我什至不关心端点的结果,我只是想“触发”它,因为端点一旦收到呼叫,它将自行运行一些代码。
我在这里的“问题”是我对5个端点执行此操作,它们通常需要3秒钟,并且我不需要等待那么多,因为端点仅返回“ OK”消息,而我不在乎实际的消息。
有什么方法可以执行此GET操作而不会“阻塞” Java?与“执行此调用并忽略结果”一样吗?我希望保留在Jersey上,但我愿意接受其他方式。
答案 0 :(得分:1)
我刚搬到OkHttp:
Request request = new Request.Builder().url(MY_ENDPOINT).build();
client.newCall(request).enqueue(callback);
和callback
变量只是一个空的回调。
答案 1 :(得分:0)
我很早以前就看到JAX-RS添加了异步客户端/服务器工作流(这里是Jersey实现的链接): 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");
请告诉我这种情况是否像预期的那样工作,只是好奇
Ps:我认为,使用这段代码,您的程序仍将等待响应,但是在另一个线程中,您不必管理主线程中的内容,但是这种复杂性被隐藏了。