2016-03-19 8 views
0

Ich baue eine Django-Anwendung, die von mehreren externen Anwendungen kontaktiert wird. Die Django-Anwendung soll UI bereitstellen und die Datenbank mit den von externen Anwendungen empfangenen Daten füllen.Django RabbitMQ Verbraucher

Die erste Idee war, django_rest_framework zu verwenden, aber das schien wie ein eng gekoppeltes System zu erstellen, da jede externe App die Django-App über REST-Aufruf kontaktieren muss.

Meine andere Idee ist am besten mit einem Bild beschrieben: http://imgur.com/vakZvQs Mehrere Verleger würden Nachrichten auf einem RabbitMQ erstellen und mein Django würde diese verbrauchen und entsprechende Modelle in der Datenbank erstellen.

Ist so etwas möglich? Ich habe Async Beispiele aus pika Bibliothek für Publisher und Consumer verwendet und die Nachrichten fließen wie erwartet. Werfen Django in der Mischung erzeugt Fehler wie:

RuntimeError: Model class django.contrib.contenttypes.models.ContentType doesn't declare an explicit app_label 

django.core.exceptions.ImproperlyConfigured: Requested setting LOGGING_CONFIG, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings. 

-Code Auszüge:

# pika consumer 
def on_message(self, unused_channel, basic_deliver, properties, body): 
     # invoking view function 
     from myapp.views import create_one_foo 
     create_one_foo() 
     self.acknowledge_message(basic_deliver.delivery_tag) 

# views.py 
from .models import Foo 

def create_one_foo(): 
    foo = Foo() 
    foo.bar = "bar" 
    foo.save() 
+0

Ihr Problem scheint in keiner Beziehung zu RabbitMQ zu stehen. Ich kenne Django nicht, aber Sie sollten mehr Details zu Ihrer Django-Anwendung angeben, damit sachkundige Personen antworten können. –

Antwort

0

Blick auf Sellerie: http://www.celeryproject.org Es ist ein Rahmen hilft zu schaffen RabbitMQ-basierte Arbeiter

Führen Sie einen Sellerie Arbeiter Dienst auf einem Host, auf dem sich deine Django-App befindet. Wenn Sie den Status von Django DB ändern müssen, importieren Sie einfach die Django-Modelle und legen Sie Daten vom Worker in die Datenbank. Ansonsten können Sie Sellerie Arbeiter in Django App laufen lassen.

Verwandte Themen