2016-03-19 3 views
0

Я создаю приложение Django, с которым будут связаны несколько внешних приложений. Предполагается, что приложение Django предоставляет интерфейс и заполняет базу данных данными, полученными от внешних приложений.Django RabbitMQ потребитель

Первой идеей было использование django_rest_framework, но это казалось созданием тесно связанной системы, потому что каждое внешнее приложение должно будет связаться с приложением Django через вызов REST.

Моя другая идея лучше всего описана с изображением: http://imgur.com/vakZvQs Несколько издателей создадут сообщения на RabbitMQ, и мой Django будет потреблять их и создавать соответствующие модели в БД.

Возможно ли это как можно? Я использовал асинхронные примеры из библиотеки pika для издателя и потребителя, и сообщения текут, как ожидалось. Бросив Джанго в смеси вызывает ошибки, такие как:

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. 

Код выдержка:

# 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

Ваша проблема, похоже, не связана с RabbitMQ. Я не знаю Django, но вы должны дать более подробную информацию о своем приложении Django, чтобы квалифицированные люди могли ответить. –

ответ

0

Посмотрите на сельдерее: http://www.celeryproject.org Это основа помогает создать RabbitMQ на основе рабочие

Run сельдерей рабочий службы на хосте, где находится ваше приложение Django. Если вам нужно изменить состояние Django DB, просто импортируйте модели Django и поместите данные в базу данных рабочим. В противном случае вы можете запускать работников сельдерея в приложении Django.

Смежные вопросы