Это не связано напрямую с Celery.
Вы можете решить это следующим образом:
- создать команду управления в Django, которая делает все, что нужно сделать с помощью входящее сообщение / данные (https://docs.djangoproject.com/en/3.0/howto/custom-management-commands/)
- создать получателя, который также может быть командой Django, которая затем запускается в отдельном процессе, который не является частью обычного Django процесс (хотя он может быть частью вашего Django кода). В этом приемнике вы слушаете очередь, и всякий раз, когда поступают данные, вызывается команда управления из (1.).
Конечно, 1. и 2. также можно выполнить за один раз. команда. Я разделил это, чтобы лучше проиллюстрировать различные аспекты. И у вас могут быть разные задачи и вы можете повторно использовать одного потребителя. Кроме того, если у вас уже есть (1.), вы можете повторно использовать его следующим образом, и вы можете легко протестировать его без лишних затрат потребителя.
Подробнее о RabbitMQ python потребителей: https://github.com/celery/celery/blob/master/celery/worker/consumer/consumer.py
Вот потребитель Celery: https://github.com/celery/celery/blob/master/celery/worker/consumer/consumer.py, потому что у Celery, конечно, есть собственный потребитель. Это выглядит довольно обобщенно c, хотя простой потребитель должен быть менее сложным.
(я только когда-либо писал потребителей NSQ python как часть Django, поэтому прямого опыта с потребителями RabbitMQ нет (только в качестве бэкэнда для Celery).)
РЕДАКТИРОВАТЬ: Вы должны спросить себя: я хочу, чтобы данные в реальном времени сохранялись и сохранялись в моем приложении Django, в первую очередь?
Если да - тогда RabbitMQ + Consumer - очень правильный подход.
Если нет, если это только для пользователя - вы могли бы также подумать о том, чтобы напрямую выставить его через API своему веб-интерфейсу (и там использовать ajax вызывает для извлечения).
Если нет, но вы хотите буферизовать данные, чтобы избежать попадания в другое приложение, которое генерирует данные - тогда очередь - очень хороший инструмент. Однако в этом случае вы можете изменить потребителя не для сохранения данных, а для предоставления их вашему веб-интерфейсу. Если вам требуется только поддержка новых браузеров, вы можете использовать веб-сокеты, которые теперь поддерживаются с Django 3:
https://blog.heroku.com/in_deep_with_django_channels_the_future_of_real_time_apps_in_django