Vous pouvez y parvenir en utilisant des listes Redis avec une file d'attente "d'expédition" supplémentaire que tous les travailleurs BRPOP
pour leurs emplois. Chaque travail dans la file d'attente de répartition est étiqueté avec l'ID de file d'attente d'origine, et lorsque le travailleur a terminé le travail, il va dans cette file d'attente d'origine et exécute RPOPLPUSH
dans la file d'attente de répartition pour rendre le travail suivant disponible pour tout autre travailleur. La file d'attente d'expédition aura donc un maximum de num_queues éléments.
Une chose que vous devrez gérer est la population initiale de la file d'attente de répartition lorsque la file d'attente source est vide. Il peut s'agir simplement d'une vérification effectuée par l'éditeur par rapport à un indicateur "vide" pour chaque file d'attente définie initialement, et également défini par le travailleur lorsqu'il ne reste plus rien dans la file d'attente d'origine à expédier. Si cet indicateur est défini, l'éditeur peut simplement LPUSH
le premier travail directement dans la file d'attente d'expédition.