[JAVA] Implémentation du traitement asynchrone dans Tomcat

Traitement asynchrone dans Tomcat

introduction

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.

Structure de l'article

Cet article se compose de trois articles.

Source de l'échantillon

Le code source créé pour cet article se trouve sur GitHub.

Résumé

--Pour un seul locataire

Recommended Posts

Implémentation du traitement asynchrone dans Tomcat
Implémentation du traitement asynchrone compatible multi-tenant dans Tomcat
Implémentation du traitement asynchrone pour un seul locataire dans Tomcat
Implémentation Java de tri-tree
Implémentation de HashMap avec kotlin
[Rails] Implémentation asynchrone de la fonction similaire
Essayez d'implémenter le traitement asynchrone dans Azure
Ordre de traitement dans le programme
Implémentation d'une fonction similaire en Java
Implémentation de DBlayer en Java (RDB, MySQL)
Traitement des threads de l'interface utilisateur asynchrone Android
Comment implémenter le traitement asynchrone dans Outsystems
Traitement asynchrone avec exécution régulière dans Spring Boot
Implémentation du regroupement de chiffres dans l'application Furima
Mémo d'implémentation SKStoreReviewController dans l'interface utilisateur Swift d'iOS14
[Rails] Mise en œuvre de "notifier la notification d'une manière ou d'une autre"
Implémentation de l'interpréteur par Java
Format de la sortie du journal par Tomcat lui-même dans Tomcat 8
Exécution asynchrone des requêtes examinée dans Spring Boot 1.5.9
Préparer l'environnement d'exécution de Tomcat dans IntelliJ Community
Accédez au fichier war dans le répertoire racine de Tomcat
À propos du problème de blocage dans le traitement parallèle dans la version 4.0 de gem'sprockets
Exemple d'implémentation d'un système de traitement LISP simple (version Java)
Implémentation Boyer-Moore en Java
Traitement asynchrone et intégration d'API Web dans Android Studio
À propos de l'ajout de variables dans le traitement itératif dans l'instruction while
Implémentation appliquée de l'espace de chat
Implémentation du tri de tas (en java)
Utiliser MouseListener avec le traitement
Mise en œuvre de la fonction de pagénation
Exemple d'implémentation d'un système de traitement LISP simple (version Ruby)
Sortie en multiples de 3
À propos de l'implémentation du traitement de fusion, y compris la fonction de tri de l'API Stream
Mise en place de la fonction de tri des rails (affichés par ordre de nombre de like)
Implémentation de la suppression d'ajax dans Rails
Processus de nettoyage des phrases japonaises
Implémentation de la fonction de recherche séquentielle
Implémentation d'une fonction similaire (Ajax)
Implémentation de la fonction de prévisualisation d'image
[Java] Implémentation du réseau Faistel
Implémentation de XLPagerTabStrip avec TabBarController
Vue d'ensemble de l'architecture de Tomcat (Catalina)
Mise en œuvre de la fonction déroulante de catégorie
[Java] Méthode d'implémentation du traitement du minuteur
Traitement parallèle mesuré avec Java
Traitement du jugement Mazume dans la pêche