Dans une application Web, si vous traitez une requête HTTP d'un client pendant une longue période, la réponse HTTP expirera et il sera difficile de vérifier si la requête HTTP a été acceptée normalement. Même si un traitement qui prend beaucoup de temps est effectué en arrière-plan, si le nombre d'exécutions simultanées de tâches asynchrones n'est pas limité, le nombre de threads peut augmenter et les ressources de l'environnement d'exploitation peuvent être épuisées, entraînant une inopérabilité.
Envisagez une méthode pour appeler de manière asynchrone un processus qui prend beaucoup de temps, comme illustré dans la figure ci-dessous dans une application Tomcat qui s'exécute sur un conteneur Tomcat.
** Figure 1 Flux de traitement asynchrone **
Dans la figure 1, il y a trois éléments dans le conteneur Tomcat: contrôleur, service et entité. Lorsqu'une requête HTTP provient du client, le service est appelé de manière asynchrone depuis le contrôleur via le conteneur Tomcat. Une réponse HTTP peut être renvoyée au client immédiatement après l'appel asynchrone, afin que le client puisse être informé si la requête HTTP a été acceptée ou rejetée. Si vous reflétez l'état d'exécution de la tâche asynchrone dans l'entité, vous pouvez émettre une autre requête HTTP ultérieurement et vérifier l'état d'exécution.
L'implémentation d'appels asynchrones nécessite le contrôle du flux des tâches asynchrones, comme mentionné au début, mais ce que vous devez savoir ici, c'est qu'il n'est pas recommandé aux applications de générer des threads "correctement". En effet, le conteneur Tomcat et le conteneur Java EE ne reconnaissent pas les threads créés par l'application, ce qui rend impossible la gestion correcte du cycle de vie des threads. Par conséquent, il est proposé par "Concurrency Utilities for Java EE (JSR 236)", qui est une spécification pour gérer le nombre de threads et le cycle de vie. Et introduit dans Java EE 7.
Le conteneur Tomcat est comme un sous-ensemble du conteneur Java EE et ne prend pas en charge JSR 236, mais Spring Framework vous permet de gérer le cycle de vie des threads. Ici, nous examinerons comment implémenter le contrôle de flux pour le traitement non simultané de «** support à locataire unique » et « support multi-locataire **» à l'aide de Spring Framework.
Cet article se compose de trois articles.
Le code source créé pour cet article se trouve sur GitHub.
--Pour un seul locataire
Recommended Posts