Форум сайта python.su
Доброго времени соток.
Пишу frontend и уже подхожу к тестированию. Уже есть функционал на backend-е. Но пока они не как не соединены. Часть связи будет проходить через RabbitMQ (frontend отдает команды в backend). Но, проблема в том, что backend должен периодически писать в базу. И тут вопрос как это сделать грамотно. Не хватает практики. На backend-е написан агент, который после работы должен результат записать в базу, которой пользуется frontend. Но база в django сами знаете какая. Одно дело пользоваться API, другое дело писать прямые запросы в базу – глупо. Особенно если есть поля ManyToMany и так далее.
Может есть какое-то решение как это сделать, может почитать есть что полезное на эту тему.
Офлайн
зачем RabbitMQ? что мешает дёргать напрямую апи бекенда
какой ещё ‘бекенд агент’? поищите примеры с angular + django-rest-framework
Офлайн
Агент занят обслуживанием процесса (запуск, перезапуск, выполнение операций с конфигами процесса, да и вообще все что нужно будет делать с этим процессом). RabbitMQ как раз и нужен чтоб распределить эти процессы по разным серверам (физическим). Например чтоб поднять процесс будет одна очередь. Все агенты к ней подключены и не важно кто себе эту задачу заберет. А после выполнения агент должен записать в базу где разместился сервер (процесс). И опять же через RabbitMQ будут отдаваться команды что делать с сервером. Только очередь уже не общая а конкретно для этого сервера.
Django тут как интерфейс + модели. У меня проблема получения от агента информацию. Пользователи кликают мышкой, заказывают услугу. Потом нужно небольшое управление этим сервером.
Вот какая задача.
Офлайн
Вопрос конкретезировался. Что можно использовать чтоб получать информацию от агента к django (в базу). RabbitMQ конечно было бы удобно, но с Django не проканает. Нужно что-то что может висеть и получать данные и писать их в базу.
Наверняка я есть что-то уже готовое. Или как-то организовать работу. Я подумал, что можно использовать для этого Celery. Через Django кинуть в Celery задание, а оно в RabbitMQ (тут вроде даже двойное использование RabbitMQ) и ждать ответа. После получения результата писать в базу. Ничего другого не придумал. Пока не очень понятно, как это в коде организовать.
ЗЫ
Я не веб-разработчик. Потому многого не знаю. Так что сильно пинать не надо.
Офлайн
k0st1an
все верно, для запуска долгоиграющих задач в фоне используют celery, там и воркеры свои
если я правильно понял проблему, то http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html#keeping-results и http://docs.celeryproject.org/en/latest/faq.html#how-do-i-get-the-result-of-a-task-if-i-have-the-id-that-points-there смотри, я в наверно в рест обернул всё это дело и клиентом проверял состояние задачи (выполнена или нет)
Отредактировано slav0nic (Ноя. 18, 2015 14:26:49)
Офлайн