2017-08-20 3 views
12

J'aimerais utiliser Celery (avec RabbitMQ comme backend MQ) pour exécuter des tâches de différentes saveurs via différentes files d'attente. Une exigence est que la consommation (par les travailleurs) d'une file d'attente particulière devrait avoir la capacité d'être mise en pause et de reprendre. Céleri, semble avoir this capability en appelant add_consumer et cancel_consumer. Tandis que j'étais capable d'annuler la consommation de tâches d'une file d'attente pour un travailleur particulier, je ne peux pas obtenir le travailleur de reprendre la consommation en appelant add_consumer. The code to reproduce this issue is provided here. Ma conjecture est probable que je manque une sorte de paramètre à fournir soit dans le celeryconfig ou via les arguments lors du démarrage des travailleurs?Le worker ne consomme pas de tâches après l'appel de céleri add_consumer

Serait génial d'avoir quelques nouvelles paires d'yeux sur ce sujet. Il n'y a pas beaucoup de discussion sur Stackoverflow concernant add_consumer ni dans Github. J'espère donc que certains experts sont prêts à partager leurs pensées et expériences.

-

Je courais le ci-dessous:

OS Windows, RabbitMQ 3.5.6, Erlang 18.1, Python 3.3.5, le céleri 3.1.15

Répondre

2

Pour reprendre la file d'attente, vous besoin de spécifier le nom de la file d'attente ainsi que les travailleurs cibles. Voici comment faire.

app.control.add_consumer(queue='high', destination=['[email protected]']) 

est ici add_consumer signature

def add_consumer(state, queue, exchange=None, exchange_type=None, 
      routing_key=None, **options): 

Dans votre cas, vous appelez avec

app.control.add_consumer('high', destination=['[email protected]']) 

Alors high devient passé à l'autre et la file d'attente est vide. Donc, il n'est pas capable de reprendre.

+0

Merci pour la tentative. Le contenu multi-fichiers que j'ai fourni pour reproduire ce comportement utilise add_consumer. Alors que le worker reconnaît l'exécution de add_consumer, il ne reprend pas la consommation des tâches dans la file d'attente. Je soupçonne que mon céleryconfig n'est pas correctement réglé ou qu'il y a un bug potentiel dans le céleri. – teng

+0

@teng Avez-vous essayé avec 'queue = high' tout en ajoutant un consommateur? J'ai utilisé votre esprit et reproduit le comportement. Après avoir passé les paramètres appropriés, cela fonctionne correctement. – ChillarAnand

+0

J'ai ajouté le 'queue = high' comme le kwarg à add_consumer, comme opposé à l'argument, et après l'exécution de resume.py, le worker ne consomme toujours pas de tâches. Pourriez-vous me dire quel est votre système d'exploitation et les versions de rabbitmq et de céleri que vous utilisez? – teng