Клиент Джерси не ждет результата метода GET - PullRequest
0 голосов
/ 08 декабря 2018

У меня есть простое приложение на Java, использующее Джерси для запросов, где я обращаюсь к некоторым конечным точкам в другом приложении, используя запрос GET с Джерси, например:

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

Как видите, я неДаже не заботясь о результате конечной точки, я просто хочу «вызвать» ее, так как конечная точка, как только она получит вызов, запустит некоторый код самостоятельно.

Моя «проблема» в том, что я делаю эту операцию для 5 конечных точек, и они обычно занимают до 3 секунд, и мне не нужно ждать так много, поскольку конечная точка только возвращает «ОК»сообщение, и мне наплевать на фактическое сообщение.

Есть ли способ выполнить эту операцию GET без «блокировки» Java?Как в «сделать этот вызов и игнорировать результат»?Я хотел бы сохранить это с Джерси, но я открыт для других путей.

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Я только что перешел на OkHttp :

    Request request = new Request.Builder().url(MY_ENDPOINT).build();
    client.newCall(request).enqueue(callback);

, а переменная callback является просто пустым обратным вызовом.

0 голосов
/ 08 декабря 2018

Давным-давно я видел, что JAX-RS добавил асинхронные рабочие процессы клиент / сервер (здесь ссылка на реализацию на Джерси): 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: Я думаю, что с этим кодом ваша программавсе еще буду ждать ответа, но в другом потоке вам не придется управлять вещами в основном потоке, но эта сложность скрыта.

...