Python component for MoniQue.
Необходимы библиотеки pyzmq
и msgpack
. Их можно установить с помощью пакетного менеджера pip3
:
pip3 install pyzmq msgpack
Непосредственно библиотеку с компонентом можно установить с помощью следующих команд:
git clone https://github.com/biocad/mq-component-py.git
cd mq-component-py
python3 setup.py install
Для удаления библиотеки необходимо выполнить
pip3 uninstall mq-component-py
После установки для импорта будут доступны три модуля:
mq.protocol
: типыMessage
,MonitoringResult
, функции для работы с тегом, запаковки/распаковки вMessagePack
.mq.component
: классComponent
с не реализованным методомrun()
. Для написания своего компонента необходимо создать наследникаComponent
и реализовать методrun()
. Для общения сMoniQue
доступны входящие коммуникационные каналы от центрального места и контроллера, а также исходящий канал в центральное место. Примерmq.config
: классConfig
, который может загружать параметры из конфигурационного файла. Содержит адреса контроллера и центрального места, указание, куда писать лог и т.д.
Порядок создания нового компонента описан тут
Для запуска всех примеров необходим запущенный scheduler – "одно место". Мы считаем, что "одно место" у вас уже запущено на локальной машине (подробнее читай в документации mq).
Для взаимодействия с примерами можно воспользоваться jobcontrol.
Является примером асинхронного общения двух компонентов: один умеет формировать и рассылать сообщения, а другой их получать и обрабатывать. После запуска scheduler в корневой директории библиотеки можно выполнить
python3 examples/radio-listener.py --config-file examples/config.json
Если передать этому компоненту сообщение, он должен распечатать его data
. Также в мониторинг будет включено пользовательское сообщение о приёме с id
отправителя.
В качестве источника сообщений можно запустить вещатель.
Вещатель передаёт каждые две секунды сообщение с текстом Hello! It's me.
python3 examples/radio-speaker.py --config-file examples/config.json
Пример "Калькулятор"
Является примером компонента, который умеет принять соответствующее сообщение с конфигурацией, обработать его и отправить результат обратно.
Раньше такой компонент назывался "рабочим".
Представляет собой примитивный калькулятор: он принимает два операнда и действие над ними (+
или *
), а возвращает результат. Запуск производится командой
python3 examples/calculator.py --config-file examples/config.json
Для отправки ему сообщения можно в отдельном окне запустить jobcontrol и использовать calculator.json.
Пример "Банк"
Является примером того, как один компонент при выполнении задачи может использовать другой компонент.
Банк принимает месячный доход и срок в месяцах, а возвращает суммарный доход – см. bank.json. Он использует компонент calculator
для вычисления результата.
Для запуска понадобятся три окна с открытой текущей директорией.
Запуск калькулятора
python3 examples/calculator.py --config-file examples/config.json
Запуск непосредственно банка
python3 examples/bank.py --config-file examples/config.json
Для взаимодействия с помощью jobcontrol
можно использовать bank-data.json
при постановке задачи.
Пример того, как можно объединять несколько одинаковых компонентов в кластер при помощи контроллера.
Помимо scheduler-а потребуется собрать и запустить контроллер, об этом можно подробнее прочитать в его описании.
Нужно будет запустить несколько экземпляров часов
python3 examples/clock-reply.py -f examples/config.json
python3 examples/clock-reply.py -f examples/config.json
...
и один экземпляр опрашивающего компонента
python3 examples/clock-ask.py -f examples/config.json
Каждую секунду опрашивающий компонент посылает сообщение со строкой What time is it?
в поле data. Контроллер ищет не занятый коспонент-часы и направляет задачу ему, тот в свою очередь отправляет ответ с текущим временем в Epoch time.
Как вы уже наверняка знаете, для полноценной работы компонента в его обёртке необходимо реализовать различную функциональность. Ниже приведены указания на места в библиотеке с соответствующей реализацией.
- Протокол – описание формата общения с MQ.
- Компонент – общение с MQ.
- Компонент. Содержит класс Компонент, позволяющий слушать и отправлять сообщения, подписываться на сообщения с определёнными заголовками, а также выполнять некоторую полезную работу.
- Технический канал. Содержит функцию обработки технических сообщений.
- Коммуникационный канал. Содержит функцию обработки коммуникационных сообщений.
- Мониторинг. Содержит логику компонента мониторинга.
- Config – загрузка параметров MQ.
- Загрузка параметров. Умеет загружать параметры согласно описанию.