Pour faire court, voici une situation simplifiée :
Je dois mettre en place une file d'attente pour le traitement en arrière-plan des fichiers de données importés. Je veux dédier un certain nombre de consommateurs à cette tâche spécifique (disons 10) afin que plusieurs utilisateurs puissent être traités en parallèle. En même temps, pour éviter les problèmes d'écriture simultanée de données, je dois m'assurer qu'aucun utilisateur n'est traité par plusieurs consommateurs en même temps, en fait tous les fichiers d'un même utilisateur doivent être traités séquentiellement.
Solution actuelle (mais cela ne semble pas correct) :
- Avoir 1 file d'attente où toutes les tâches d'importation sont publiées (
file_queue_main
) - Avoir 10 files d'attente pour le traitement des fichiers (
file_processing_n
) - Avoir 1 file d'attente de résultats (
file_results_queue
) - Avoir un processus de gestion (dans ce cas dans
node.js
) qui consomme les messages de file_queue_main un par un et décide à quellefile_processing
pour distribuer ce message. En fait, il garde la trace de l'endroit dans lequelfile_processing
les files d'attente que l'utilisateur actuel est en train de traiter.
Voici une petite animation de ma solution actuelle et du comportement attendu :
RabbitMQ est-il vraiment l'outil qu'il faut pour ce travail ? Pour une raison quelconque, j'ai l'impression que c'est une sorte d'anti-modèle. Toute aide est la bienvenue !