Я пытался принять решение о своем студенческом проекте, прежде чем идти дальше. Основная идея - получить данные об использовании диска, активные пользовательские данные linux и т.д. С нескольких внутренних серверов и опубликовать их с помощью Django.
Прежде чем я пришел в RabbitMQ, я думал о разработке клиентского приложения для каждого Linux-сервера и получения этих данных через сокет. Но я хочу сделать этот студенческий проект простым. Кроме того, я не знаю, как трудно подключиться к сокету через Django.
Итак, я думал, что смогу решить свою проблему с помощью RabbitMQ без программирования сокетов. В принципе, я отправляю сообщение в очередь для кроликов. Затем получите все, что захотите, с сервера-потребителя.
На стороне Django клиент выберет один из внутренних серверов и нажмет кнопку "details". Затем я хочу показать эту информацию на веб-странице.
Я уже прочитал почти всю документацию о кроличнике, сельдерее и пике. Отправка сообщений всем внутренним серверам (клиентам) и вычисление информации, которую я хочу получить, это OKAY, но я не могу понять, как я могу поместить эти данные на веб-страницу с помощью Django?
Как бы вы поняли эту проблему, если бы вы были мной?
Спасибо.
Я решил, что моя проблема своя. Решение - вызов RabbitMQ RPC. Вы можете выполнить свой код на удаленном сервере и получить результат процесса через запросы RPC. Подробности можно найти здесь.
http://www.rabbitmq.com/tutorials/tutorial-six-python.html
Спасибо вам, ребята.
Вам понадобятся следующие две программы:
Продюсер, который заполнит очередь. Это программа, которая будет собирать различные сообщения, а затем отправлять их в очередь.
Потребитель, который будет обрабатывать сообщения из очереди. Эта потребительская работа - читать сообщение и делать с ним что-то; так что он обрабатывается и удаляется из очереди. Функция, которую этот потребитель делает, полностью зависит от вас, но то, что вы хотите сделать в этом сценарии, - это запись информации из сообщения в модель базы данных; та же база данных, которая является частью вашего приложения django.
Когда производитель нажимает сообщения, а потребитель удаляет их из очереди, ваша база данных будет обновляться.
На стороне django процесс просто фильтрует эту базу данных и отображает записи для конкретной машины. Таким образом, django не должен знать, как записываются записи в базе данных - все, что делает django, - это выборка, фильтрация, отправка в шаблон и отображение представлений.
Вопрос заключается в том, как лучше всего (ну на самом деле, легко) заполнять базы данных. Вы можете сделать это традиционным способом, используя БД-API документации Python и написать свои собственные SQL-запросы; но так как сельдерей настолько хорошо интегрирован с django - вы можете использовать django ORM для выполнения этой работы для вас.
Надеюсь, это поможет вам двигаться в правильном направлении.
Похоже, вы уже проделали тяжелую работу (сельдерей, кролик и т.д.), Но не заметили основы Django. Пройдите опрос опросов и начните с django или многих других ресурсов в Интернете, и это будет довольно просто. В основном:
создайте модели (объекты, представленные в db), объявите представления настройки URL-адресов, чтобы передать данные из модели в шаблон веб-страницы, создайте шаблоны (или сделайте это с помощью клиентской среды и создайте ответ JSON)
EDIT: (после того, как вы уточнили вопрос) На самом деле я просто попал в ту же проблему. Ответ запускает другой процесс python, параллельный процессу Django (в том же virtualenv), в этом процессе вы можете настроить потребителя кроликов (используя pica, puka, kombu или что-то еще) и вызывать конкретные функции/методы Django, чтобы что-то сделать с помощью информация от rabbitmq. вы также можете просто называть задачи сельдерея оттуда для выполнения в контексте приложения Django.
например, procfile
(просто иллюстрируя, вы можете запускать оба процесса многими другими способами):
web: python manage.py runserver
worker: python listen_from_servers.py
Обратите внимание, что вам нужно будет установить для DJANGO_SETTIGNS_MODULE
переменную окружения файла настроек для импорта django.