Redis
 sql >> Base de données >  >> NoSQL >> Redis

Comment puis-je implémenter cette file d'attente distribuée à simultanéité unique sur n'importe quelle plate-forme MQ ?

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.