Java - Создание нескольких запросов с использованием HTTP2 - PullRequest
0 голосов
/ 01 февраля 2019

Мне не удалось найти отличных примеров, которые можно было бы описать с помощью новой поддержки Java HTTP2.

В предыдущих версиях Java (Java 8) я много раз звонилREST сервер, использующий несколько потоков.

У меня был глобальный список параметров, и я просматриваю параметры, чтобы сделать различные виды запросов.

Например:

String[] params = {"param1","param2","param3" ..... "paramSomeBigNumber"};

for (int i = 0 ; i < params.length ; i++){

   String targetURL= "http://ohellothere.notarealdomain.commmmm?a=" + params[i];

   HttpURLConnection connection = null;

   URL url = new URL(targetURL);
   connection = (HttpURLConnection) url.openConnection();
   connection.setRequestMethod("GET");

   //Send request
   DataOutputStream wr = new DataOutputStream (
        connection.getOutputStream());
    wr.writeBytes(urlParameters);
    wr.close();

    //Get Response  
    InputStream is = connection.getInputStream();
    BufferedReader rd = new BufferedReader(new InputStreamReader(is));

//Do some stuff with this specific http response

}

В предыдущем коде чтоЯ хотел бы создать несколько HTTP запросов на один и тот же сервер с небольшим изменением параметра.Это заняло некоторое время, поэтому я даже разбил работу, используя потоки, чтобы каждый поток работал на некотором фрагменте массива параметров.

С HTTP2 Теперь мне не нужно было бы создавать новыйсвязь каждый раз.Проблема в том, что я не совсем понимаю, как реализовать это с помощью новых версий Java (Java 9 - 11).

Если у меня есть параметр массива, как у меня ранее, как бы я сделал следующее:

1) Re-use the same connection?
2) Allow different threads to use the same connection?

По сути, я ищу пример того, что я делал раньше, но теперь использую HTTP2.

С уважением

1 Ответ

0 голосов
/ 01 февраля 2019

Это заняло некоторое время, поэтому я даже разбил бы работу, используя потоки, чтобы каждый поток работал на некотором фрагменте массива param.

С Java 11 HttpClient это действительно очень просто достичь;все, что вам нужно, это следующий фрагмент:

var client = HttpClient.newBuilder().version(HttpClient.Version.HTTP_2).build();

String[] params = {"param1", "param2", "param3", "paramSomeBigNumber"};

for (var param : params) {
    var targetURL = "http://ohellothere.notarealdomain.commmmm?a=" + param;
    var request = HttpRequest.newBuilder().GET().uri(new URI(targetURL)).build();
    client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
          .whenComplete((response, exception) -> {
              // Handle response/exception here
          });
}

Это использует HTTP / 2 для асинхронной отправки запроса, а затем обрабатывает ответ String (или Throwable), когда он получен в обратном вызове.

...