2014-04-29 4 views
0

Je continue à obtenir: ERROR/MainProcess] consumer: Cannot connect to amqp://ec2celeryuser lorsque je cours celery -A tasks worker sur le terminal. Fondamentalement, ce que j'essaie de faire est de faire fonctionner celery/rabbitmq correctement sur (2) instances ec2. Pour passer une tâche stupide dans tasks.py pour le traitement de rabbitmq.Message de test de la file d'attente distribuée Celery-RabbitMQ

  1. Instance 1 - Maisons rabbitmq

Cela fonctionne actuellement RabbitMQ bien. Si je lance sudo rabbitmqctl status il sort:

Status of node '[email protected]' ... 
[{pid,786}, 

2. Instance 2 - Maisons Céleri

Je suis en train de courir sur le céleri instance 2 contre 1 instance en utilisant les éléments suivants dans le terminal:

céleri -A tâches ouvrières

Je dispose d'un fichier celeryconfig.py:

BROKER_URL = 'amqp://ec2celeryuser:[email protected]:5672/celeryserver1/' 

#CELERY SETTINGS 
CELERY_IMPORTS = ("tasks",) 

CELERY_RESULT_BACKEND = "amqp" 

J'ai un fichier client.py:

from tasks import add 

result = add.delay(4, 4) # call task 
result_sum = result.get(timeout=5) # wait to get result for a maximum of 5 seconds 

J'ai un fichier tasks.py:

from celery import Celery 

app = Celery('tasks', broker='amqp://ec2celeryuser:[email protected]:5672/celeryserver1/') 

@app.task 
def add(x, y): 
    return x + y 

J'ai correctement configuré un vhost, un utilisateur ec2celeryuser, et a donné ces autorisations utilisateur de:

sudo rabbitmqctl set_permissions -p /celeryserver1 ec2celeryuser ".*" ".*" ".*" 

si je le fais: sudo rabbitmqctl list_users sur RabbitMQ (instance 1), il montre:J'ai essayé les deux noms d'utilisateur avec leurs mots de passe, mais pas de changement.

J'ai suivi le Celery Guide, et un tutorial sans beaucoup de chance.

Qu'est-ce que je fais mal ici? Il y a clairement un problème de connexion, mais qu'est-ce que je fais de mal?

Merci!

+0

une conjecture sauvage, mais avez-vous un personnage étrange dans votre mot de passe? – xbb

+0

Non, son alphanumérique, pas de caractère spécial. – CodeTalk

Répondre

3

Merci à l'utilisateur natdempk de m'avoir aidé à corriger la syntaxe de configuration d'une file d'attente.

La question a été la création d'un vhost dans rabbitmq comme:

sudo rabbitmqctl add_vhost /celeryserver1 

quand il aurait dû être:

sudo rabbitmqctl add_vhost celeryserver1 

je devais alors réinitialiser les autorisations pour mon utilisateur ec2celeryuser comme:

sudo rabbitmqctl set_permissions -p celeryserver1 ec2celeryuser ".*" ".*" ".*" 

La façon dont j'ai réalisé que c'était le problème était: je vis ITEd /var/log/rabbitmq/<last log file.log>

et vu:

=INFO REPORT==== 30-Apr-2014::12:45:58 === 
accepted TCP connection on [::]:5672 from xx.xxx.xxx.xxx:45964 

=INFO REPORT==== 30-Apr-2014::12:45:58 === 
starting TCP connection <x.xxx.x> from from xx.xxx.xxx.xxx:45964 

=ERROR REPORT==== 30-Apr-2014::12:46:01 === 
exception on TCP connection <x.xxx.x> from from xx.xxx.xxx.xxx:45964 
{channel0_error,opening, 
       {amqp_error,access_refused, 
          "access to vhost 'celeryserver1/' refused for user 'ec2celeryuser'", 
          'connection.open'}} 

Depuis la fixation du vhost, je vois maintenant agréablement:

[2014-04-30 13:08:10,101: WARNING/MainProcess] [email protected] ready. 
1

Donc, je vois quelques choses qui ne vont pas ici. D'abord votre URL de courtier pour rabbitMQ dans tasks.py ne semble pas correcte. Il devrait lire quelque chose comme ci-dessous.

app = Celery('tasks', broker='amqp://ec2celeryuser:[email protected]/celeryserver1/')

Aussi, vous pouvez spécifier l'application que vous voulez le céleri pour servir lorsque vous exécutez le processus de travail. Vous pouvez le faire en exécutant celery -A tasks worker à partir du répertoire tasks.py est situé dans.

Une autre chose est votre code client.py pour appeler votre tâche semble incorrecte.De la documentation de céleri, vous pouvez appeler la tâche comme suit:

from tasks import add 

result = add.delay(4, 4) # call task 
result_sum = result.get(timeout=5) # wait to get result for a maximum of 5 seconds 

fixation ceux-ci pourraient résoudre votre problème, ou du moins vous rapprocher.

+0

Merci pour la réponse complète. J'ai implémenté ceci, mais obtenant toujours le consommateur ERROR/MainProcess]: Impossible de se connecter à amqp: //[email protected]: 5672/celeryserver1/d'autres idées? – CodeTalk

+0

@CodeTalk Je pense que vos URL de courtier sont toujours fausses. Ils devraient être de la forme: 'amqp: // utilisateur: mot de passe @ IP: port/vhost /' –

+0

Toujours rien, voir quelque chose de mal encore? (Le code est mis à jour) – CodeTalk

Questions connexes