泽西岛客户不要等待GET方法的结果

时间:2018-12-08 10:07:09

标签: java jersey jersey-client

我有一个使用Java编写的简单应用程序,使用Jersey来处理请求,在新泽西州我使用GET请求在其他应用程序中命中了一些端点,如下所示:

Client client = new Client();
WebResource webResource = client.resource("MY_ENDPOINT");
webResource.get(String.class);

如您所见,我什至不关心端点的结果,我只是想“触发”它,因为端点一旦收到呼叫,它将自行运行一些代码。

我在这里的“问题”是我对5个端点执行此操作,它们通常需要3秒钟,并且我不需要等待那么多,因为端点仅返回“ OK”消息,而我不在乎实际的消息。

有什么方法可以执行此GET操作而不会“阻塞” Java?与“执行此调用并忽略结果”一样吗?我希望保留在Jersey上,但我愿意接受其他方式。

2 个答案:

答案 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:我认为,使用这段代码,您的程序仍将等待响应,但是在另一个线程中,您不必管理主线程中的内容,但是这种复杂性被隐藏了。