2011-10-26 5 views
4

Je suis en train d'écrire un gestionnaire de listes de diffusion utilisant Django, Celery et RabbitMQ. Lorsqu'un message arrive, une tâche est exécutée pour chaque destinataire. Toutes les tâches vont à une seule file d'attente, et un ou plusieurs travailleurs consomment des tâches de la file d'attente, construisant les messages électroniques et les envoyant. La file d'attente unique provoque un problème d'équité: si un message arrive sur une liste de diffusion importante, un grand nombre de tâches sont ajoutées à la file d'attente et d'autres messages ne peuvent pas accéder à d'autres listes de diffusion plus petites à la grande liste ont été envoyés. Comment puis-je trouver un moyen de contourner cela? D'un point de vue conceptuel, une solution consisterait à créer une file d'attente pour chaque liste de diffusion et à faire en sorte que le (s) travailleur (s) consomment des tâches provenant des différentes rondes de file d'attente. Est-ce possible dans Celery, étant donné que je dois être capable de créer de nouvelles listes de diffusion dynamiquement? Je n'ai pas vu de fonctionnalité pour créer des files d'attente de façon dynamique ou pour faire en sorte que le (s) travailleur (s) consomme (nt) de nouvelles files d'attente.Création dynamique de files d'attente avec Celery

+1

La priorité des tâches serait une bonne solution. Honte rabbit ne les met pas en œuvre [encore] (http://docs.celeryproject.org/fr/master/faq.html#does-celery-support-task-priorities). – RickyA

+1

@Vebjorn Ljosa, Salut, Comment l'avez-vous résolu? – securecurve

Répondre

2

Comme le montre l'image ci-dessous, considérons un système qui utilise un échange de sujet au lieu d'un échange direct.

Contrairement à un échange direct, l'échange de sujets nous permet d'acheminer différents messages vers différentes files d'attente. Pour ce faire, configurez la clé de routage pour chaque message et liez certaines files d'attente pour accepter uniquement les messages avec une clé de routage particulière.

Un système peut être mis en place avec une priorité élevée aller dans une file d'attente dédiée et les messages de consommation, de même que les messages de priorité normale ou faible sont gérés par une ou plusieurs files d'attente. Le céleri prend en charge l'équilibrage de charge entre plusieurs travailleurs (le nombre de travailleurs dépend du matériel). Les paramètres de configuration du céleri tels que BROKER_POOL_LIMIT, PREFETCH_LIMIT etc. aident à mieux équilibrer la charge et à réduire la congestion.

enter image description here