CodeGym/Cours Java/Module 3/Requêtes asynchrones dans HttpClient

Requêtes asynchrones dans HttpClient

Disponible

5.1 méthode sendAsync()

Vous pouvez également envoyer des requêtes asynchrones à l'aide de HttpClient. Habituellement, cela se fait dans trois cas.

Le premier cas est que la requête va prendre un temps très long , par exemple l'envoi/la réception d'un fichier. Cette opération est alors lancée et exécutée de manière asynchrone.

Le deuxième cas est que vous devez envoyer des requêtes très souvent et que vous ne voulez pas attendre une réponse de la requête précédente avant d'envoyer la suivante.

Et enfin, le troisième cas - le résultat de votre demande n'est pas important pour vous . Par exemple, vous prenez une capture d'écran de votre écran une fois par minute et l'envoyez au serveur. C'est-à-dire que la logique de votre application suppose qu'il existe de nombreuses demandes et que toutes ne les atteignent pas. Ensuite, il est pratique de travailler selon le principe - envoyer et oublier.

Pour envoyer une requête asynchrone, vous devez appeler une méthode sendAsync()sur un objet de la classe HttpClient. Cette méthode se termine immédiatement et renvoie un fichier CompletableFuture<HttpResponse>. Avec lui, vous pouvez suivre le moment où la demande est réellement exécutée, ainsi qu'exécuter certains codes une fois la demande terminée. Exemple:

HttpClient client = HttpClient.newBuilder().build();

CompletableFuture<HttpResponse<String>> response = client.sendAsync(
        request,
        HttpResponse.BodyHandlers.ofString()
);

La méthode sendAsync()renvoie un objet CompletableFuturequi contient un HttpResponse à l'intérieur, qui contient la chaîne que le serveur renverra.

5.2 La méthode executor(), ExecutorService

De plus, HttpClient vous permet de lui passer ExecutorService(un pool de threads) qui sera utilisé pour effectuer des requêtes asynchrones. En fait, dans les applications Java côté serveur, cela se fait toujours.

Après tout, si pour chaque requête entrante vers votre API, vous lancez plusieurs requêtes asynchrones ailleurs, vous n'aurez pas assez de threads. Exemple:

ExecutorService executorService = Executors.newFixedThreadPool(2);

CompletableFuture<HttpResponse<String>> response1 = HttpClient.newBuilder()
  .executor(executorService)
  .build()
  .sendAsync(request, HttpResponse.BodyHandlers.ofString());

CompletableFuture<HttpResponse<String>> response2 = HttpClient.newBuilder()
  .executor(executorService)
  .build()
  .sendAsync(request, HttpResponse.BodyHandlers.ofString());

Si le pool de threads n'est pas défini, la valeur par défaut est .java.util.concurrent.Executors.newCachedThreadPool()

Commentaires
  • Populaires
  • Nouveau
  • Anciennes
Tu dois être connecté(e) pour laisser un commentaire
Cette page ne comporte pas encore de commentaires