Avec Mendix 9, nous avons introduit le File d'attente des tâches pour vous permettre d'exécuter de manière asynchrone des microflux ou des actions Java de manière distribuée. Cette fonctionnalité vous permet de créer des applications sans état très performantes sans avoir à vous soucier de la synchronisation et de la gestion des tâches.
Dans cet article, je vous en dirai plus sur la file d'attente des tâches et sur la façon dont elle diffère du module obsolète File d'attente des processus. J'ai également demandé Marcel Groeneweg Mendix expert et MVP d'ITvisors pour partager avec nous certaines de ses premières expériences avec la file d'attente des tâches.
Qu'est-ce que la file d'attente des tâches ?
La file d'attente des tâches est une solution de mise en file d'attente évolutive horizontalement qui vous aide à rendre vos applications plus fiables et plus performantes. Vous pouvez exécuter des tâches de longue durée en arrière-plan pour éviter à l'utilisateur d'avoir à attendre, répartir la charge sur plusieurs instances d'exécution et allouer de manière optimale les ressources en utilisant plusieurs files d'attente.
La file d'attente des tâches est généralement utilisée dans les cas où il y a un volume élevé de transactions, les tâches prennent beaucoup de temps ou lorsque la fiabilité est la clé. Tous les nœuds peuvent récupérer les tâches en file d'attente, ce qui ajoute effectivement l'option de mise à l'échelle horizontale à la boîte à outils. Les tâches récupérées par un nœud qui échoue pendant l'exécution seront récupérées à nouveau, vous êtes donc moins dépendant de la réussite d'un seul nœud. Étant donné que vous pouvez également mettre en file d'attente les tâches à partir d'un événement planifié, vous pouvez contourner la dépendance d'un événement planifié sur un seul nœud et garantir que les lots de tâches sont toujours exécutés.
Génial. Comment commencer ?
Il est simple de commencer à utiliser la file d'attente des tâches. Après avoir ajouté une nouvelle file d'attente des tâches dans Studio Pro, vous pouvez l'indiquer sur un Appeler le microflux activité selon laquelle le microflux doit être exécuté en arrière-plan. Après avoir mis la tâche en file d'attente, elle sera récupérée par l'une de vos instances d'exécution pour traitement. Enfin, elle sera déplacée vers le Tâche de file d'attente traitée table avec un état de réussite, sur la base duquel vous pouvez implémenter une logique supplémentaire.
C'est comme ça qu'on le fait.
Par exemple
Prenons le cas d'un administrateur souhaitant générer des documents PDF et Word à partir d'une liste de factures dans la base de données. L'utilisateur déclenche un microflux en appuyant sur un bouton, qui appelle des sous-microflux dans une boucle pour générer les fichiers. Sans la file d'attente des tâches, la page affichera une barre de chargement jusqu'à ce que l'action soit terminée, empêchant l'utilisateur de travailler avec l'application entre-temps.
Pour améliorer cela, nous pouvons spécifier que les sous-microflux doivent être exécutés via une file d'attente de tâches. Étant donné que tous les nœuds peuvent désormais aider à générer les documents, l'utilisateur obtiendra des résultats plus rapidement et ne sera pas bloqué pendant la génération des fichiers en arrière-plan.
Regardez tout ce travail en arrière-plan, pour que vos acteurs puissent briller sur scène.
Comparaison avec la file d'attente des processus
Il existe plusieurs différences entre la file d'attente des tâches et la file d'attente obsolète. File d'attente de processus module:
La file d'attente des tâches est une partie native de Mendix et ne nécessite donc plus la configuration d'entités et d'associations supplémentaires, réduisant ainsi la complexité de votre modèle de domaine.
Si vous pensiez que c’était bien, la file d’attente des tâches permet également une mise à l’échelle horizontale, ce qui en fait la solution idéale pour les environnements multi-instances.
À venir : la file d’attente des tâches prendra en charge la relance automatique des tâches, ce qui est prévu pour plus tard cette année.
Expériences avec la file d'attente des tâches
C'est bien beau tout ça, mais comment fonctionne la file d'attente des tâches dans des scénarios réels. J'ai parlé avec Marcel Groeneweg, certifié Mendix Expert chez ITvisors et Mendix MVP, qui a déjà travaillé avec la file d'attente des tâches dans Mendix 9.
Q : Qu'avez-vous fait avec la file d'attente des tâches ?
R : Nous avons remplacé certains processus d'arrière-plan de longue durée qui étaient auparavant exécutés à partir de la file d'attente des processus. Ces processus d'arrière-plan collectent des données à partir de systèmes externes et les traitent. Nous utilisons également une file d'attente pour télécharger des images. Chaque image est une tâche distincte pour éviter qu'un téléchargement échoué n'en perturbe tous les autres et pour maintenir la taille de la transaction à un niveau faible.
Q : Comment ça vous plaît jusqu'à présent ?
R : Facile à utiliser, très pratique pour configurer cela dans le modèle. Plus besoin de configuration après le déploiement dans les pages de configuration de l'application elle-même.
Q : Comment s'est déroulée la migration depuis le module File d'attente des processus ?
R : C'est vraiment simple. Il suffit de configurer une ou plusieurs files d'attente, de modifier les paramètres du microflow (supprimer l'entité supplémentaire liée à la file d'attente de processus) et de remplacer la logique de la file d'attente de processus dans le microflow appelant par une seule activité d'appel de microflow.
Q : Comment vous êtes-vous préparé à cette migration ?
R : L'impact peut être facilement déterminé en cliquant avec le bouton droit de la souris sur le module Process Queue dans le modèle pour « Rechercher les utilisations ». Pour chaque tâche en arrière-plan, une association entre modules existe entre votre entité et ProcessQueue.QueuedAction et celles-ci doivent être nettoyées. Il reste des références à l'entité ProcessQueue.Process pour les paramètres de configuration et de sécurité du projet qui peuvent également être supprimés.
Q : Des suggestions pour l’avenir ?
R : Des limites à l'échelle du cluster (exécuter une seule tâche à la fois) et des tentatives automatiques avec des intervalles de tentative exponentiels seraient une bonne chose. En outre, il serait pratique qu'un identifiant soit renvoyé lors de la planification d'une tâche dans une action Java afin que nous puissions en assurer le suivi. Enfin, pouvoir définir un délai ou une heure spécifique pour l'exécution serait vraiment puissant.
Démarrer!
Dans ce blog, j'ai abordé la fonctionnalité de la file d'attente des tâches : une solution évolutive horizontalement pour exécuter des microflux de manière asynchrone. Allez l'essayer dans Mendix 9 et assurez-vous de partager vos expériences avec nous.