Skip to content

biocad/mq-component-hs

Repository files navigation

mq-component-hs

Сборка

Сборка данной библиотеки осуществляется из внутренней сети компании BIOCAD (до того момента, как данный компонент будет переведён в hackage) с помощью инструмента stack:

stack build

Использование в сторонних библиотеках

Данная библиотека используется при разработке компонентов на языке haskell. Её необходимо подключить в зависимостях разрабатываемой библиотеки.

Создание нового компонента

Порядок создания нового компонента описан тут.

Запуск примеров

Подразумевается, что "одно место" у вас уже запущено на локальной машине (подробнее читай в документации mq).

Перед запуском необходимо собрать все примеры с помощью команды

stack build

Пример "радио"

Является примером асинхронного общения двух компонентов: один умеет формировать и рассылать сообщения, а другой их получать и обрабатывать.

Типы сообщений для данного примера определены в этом файле.

"Радио точка" реализована в этом файле и запускается с помощью команды

stack exec example-radio-speaker

Получатель сообщений реализован в этом файле и запускается с помощью команды

stack exec example-radio-listener

Тот же самый получаеть, который реализован с помощью соответствующего шаблона, находится в этом файле и запускается с помощью команды

stack exec example-radio-listener-2

Пример "калькулятор"

Является примером компонента, который умеет принять соответствующее сообщение с конфигурацией, обработать его и отправить результат обратно. Раньше такой компонент назывался "рабочим".

Типы сообщений для данного примера определены в этом файле.

Логика простейшего калькулятора описана в этом файле, а запускается он с помощью команды

stack exec example-calculator

Поставить задачу этому компоненту можно с помощью библиотеки mq-jobcontrol. Необходимо помнить, что калькулятор к этому моменту уже должен быть запущен.

Можно обратить внимание на то, что калькулятор реализован с использованием соответствующего шаблона.

Пример "банк"

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

Типы сообщений для данного примера определены в этом файле.

Логика нашего банка определена в этом файле, а запускается он с помощью команды

stack exec example-bank

Поставить задачу этому компоненту можно также с помощью библиотеки mq-jobcontrol.

Можно обратить внимание на то, что банк использует шаблон "рабочего" и вызов удалённого компонента.

Пример "часики"

Является примером компонента, задачи на который распределяются через контроллер (для более подробной информации читай тут).

Типы сообщений для данного примера определены в этом файле.

Пример состоит из двух частей. Первая часть принимает сообщение от соответствующего контроллера и возвращает в очередь ответ с текущим временем. Логика этого компонента определена в этом файле

Компонент, который выполняет работу, описан в этом файле. Перед запускам этого компонента необходимо запустить контроллер. Как именно это сделать, описано в этом репозитории. Для запуска конкретно этого примера никаких правок в файле config.json производить не следует.

После запуска контроллера сам компонент можно запустить с помощью команды

stack exec example-clock-reply
stack exec example-clock-reply

Здесь приведена одна и та же команда. Их можно ввести в различных терминалах. Если всё будет запущено правильно, то после запуска второй части (которая описана ниже) можно будет увидеть, что эти два приложения будут по очереди принимать и выполнять задачи.

Вторая часть совсем простая. Это самый обычный компонент, который в некоторой периодичностью отправляет в очередь вопрос, а получив на него ответ просто его печатает. Логика этого компонента описана в этом файле и его можно запустить с помощью команды

stack exec example-clock-ask

Порядок реализации компонента

Как вы уже наверняка знаете, для полноценной работы компонента в его обёртке необходимо реализовать различную функциональность. Ниже приведены указания на места в библиотеке с соответствующей реализацией.

Основные модули:

Дополнительные модули:

Подписка на различные тэги сообщений для языка Haskell реализована в базовой библиотеке mq.