Skip to content

Как создать модуль

Dmitry Che edited this page Apr 4, 2016 · 16 revisions

Прежде чем начинать

Прежде чем приступать к созданию модулей, внимательно ознакомьтесь с описанием архитектуры Агрегата. Без этих вводных знаний трудно понять, что написано в этом разделе.

Что такое модуль в Агрегате

Модуль - это по сути verticle в терминах Vertx. То есть любой модуль должен быть написан и упакован ровно так же, как пишется и упаковывается любой модуль в Vertx. Подробнее о том, как выглядит модуль Vertx на Java, читайте здесь. В документации Vertx можно найти подробную документацию и для других языков программирования - в разделе Core на этой странице.

Что потребуется

Вы можете использовать один из поддерживаемых языков программирования и любую удобную для вас IDE для разработки. Агрегат не накладывает никаких ограничений ни на IDE, ни на способ реализации модуля, ни на сторонние библиотеки, которые ему могут понадобиться.

Разработка модуля в Eclipse

Анатомия модуля

Любой модуль (неважно какого типа) - это простой архив (в случае с Java это jar архив, в остальных случаях - zip), который содержит нужный код (в случае с Java скомпилированный байткод, в случае Javascript - просто исходники). Также в архиве должен присутствовать текстовый файл-дескриптор с именем <имя модуля>.json, где указан обязательный параметр main, указывающий на главный исполняющий файл вашего модуля. Например для Java:

{
  "main" : "com.aggregate.detector.key.KeyDetector"
}

Указывает, что при старте модуля Агрегат должен запустить класс com.aggregate.detector.key.KeyDetector вашего модуля. При этом сам модуль может конечно же содержать гораздо больше файлов и классов, но минимум один.

Пример для Javascript

{
  "main" : "myscript.js"
}

О том, что такое файл-дескриптор и что в нем можно писать, читайте в документации Vertx.

Имя модуля

Имя модуля должно совпадать с именем файла модуля. Так чтобы Агрегат использовал его как имя сервиса в терминах Vertx. Для модулей Java, собранных с помощью Maven, имя файла модуля может также содержать номер версии. Например key-detector-1.0.0.jar

Что еще может быть в архиве модуля

Все что необходимо вашему модулю. В случае если вы создаете функциональный голосовой модуль, то в архиве еще должен присутствовать файл грамматики голосовых запросов с именем <имя модуля>.xml, который содержит шаблоны команд и описание диалоговых контекстов. Подробнее о нем читайте здесь.

Какие бывают модули в Агрегате

Вы можете создать:

Код модуля

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

Конфигурация

Также можно получить конфигурацию модуля, который Агрегат предоставит ему при старте (это тот самый файл <имя модуля>.json в папке conf). Для этого можно вызывать метод config(), который вернет JSON объект конфигурации. А уже оттуда можно вытаскивать данные по известным модулю именам.

Вообще это можно делать в любом методе модуля, но только после того, как вызван метод start или в самом этом методе.

Остановка модуля

Если модуль останавливается Агрегатом (при выгрузке модуля или при остановке самого Агрегата), то будет вызван метод stop. Там можно освободить используемые ресурсы (если такие есть) и правильно завершить работу модуля.
Так же, как и для метода start, для данного метода существуют синхронная и асинхронная версии.

Sorry, there was an error rendering this page.

Clone this wiki locally