2013-10-28 11 views
7

Desidero che il mio servizio di posta elettronica che ho scritto sia completamente disaccoppiato dalla mia applicazione di flask. Sto usando il sedano con rabbitmq. Quindi mi chiedo se c'è un modo per configurare il sedano così che in un progetto ho l'applicazione Flask che invia il messaggio alla coda (produttore). E in un altro progetto ho l'istanza di Celery in esecuzione che ascolta il messaggio ed esegue l'attività (utente). Sono ancora confuso da come funziona esattamente la comunicazione? Inserisco l'API (che invia l'e-mail) nella mia applicazione di flask O nel progetto di sedano? In definitiva mi piacerebbe avere l'applicazione Flask e l'istanza di Celery in diverse istanze EC2 - con rabbitmq che funge da broker dei messaggi.Separazione del consumatore e produttore di sedano

Grazie per il vostro aiuto!

risposta

5

È possibile utilizzare la funzione send_task di Celery per inviare l'attività tramite RabbitMQ all'operatore utilizzando il nome dell'attività. Hai ancora bisogno di importare il modulo che si ha l'applicazione sedano in:

Se l'operazione non è registrato nel processo in corso è possibile utilizzare send_task() per chiamare il compito per nome invece.

Esempio:

from yourmodule.yourapp import celery 
celery.send_task("yourtasksmodule.yourtask", args=["Hello World"]) 
+0

Mi chiedevo se è possibile farlo senza importare il mio modulo (come sto pensando di metterlo in un'istanza del server diverso). Poiché il sedano ha bisogno di essere su entrambi i lati del tubo (rabbitmq), la mia domanda è - posso eseguire la sottoclasse da celery.Task - in modo che da un lato avrò metodi che definiscono cosa succede quando viene chiamato un task (invia un messaggio) e dall'altra fanno i compiti attuali? – user2216194

+0

Non importa, l'ho fatto funzionare. Grazie per l'aiuto! – user2216194

+0

@ user2216194 puoi spiegare come hai funzionato? Sono bloccato con lo stesso problema di te – rrawat