- Создатель Васильев Антон, отредактировано 17.07.2024
Менеджер агентов (МА) - отдельное Web-приложение, которое предоставляет GUI для определения настроек агентов, отображает статус исполнения агентов и протоколов сбоев. Все эти данные сохраняются в собственной РБД. МА отслеживает расписания запусков агентов при помощи фреймворка Quartz и, при необходимости их запуска, отправляет приложению с агентами JMS-сообщение с параметрами для запуска.
МА решает следующие задачи:
- Централизованное управление агентами, реализованными в разных Java-приложениях (не только CMJ) и не имеющих доступа к единой БД
- Координирование полученных входных данных для агентов через JMS-очереди.
- Специальные средства для обработки основного типа JMS-сообщения - "Протокола изменений документа" (ChLog)
- Возможность запуска агент одновременно на множествах серверах и распределение между ними нагрузку для улучшения масштабируемости системы
Статус | ГОТОВО |
---|---|
Комментарий |
- При старте приложения, КМА подписывается на очередь для коммуникаций с МА (TS)
- Срабатывает Quartz Trigger
- МА находит соответствующую настройку запуска, дескритпор агента, приложения, кластера
- МА, отправляет в очередь TS сообщение, содержащее идентификатор агента, параметры и т.п.
- Сообщение поступает в МОМ
- КМА получает сообщение на запуск агента. Если режим запуска агента MANY, то все КМА в кластере получат копию сообщения.
- КМА по данным из сообщения на запуск агента создает JMS-подписку на очередь с данными. Другие КМА кластера используют туже самую подписку.
- КМА получает java-объект агента и запускает его в пуле потоков. Параметром передается объект для извлечения сообщений по сформированной подписке.
- Когда освободится поток в пуле, агент начнет работу. Агент в цикле запрашивает из МОМ очередное сообщение с данными и обрабатывает его. За счет общей для всех КМА подписки, МОМ передает сообщение только одному произвольному КМА в кластере.
Компоненты
Название компонента | Описание компонента |
---|---|
Агент | Агент - это некоторый программный код, исполняющейся в фоновом режиме. Агент активируется менеджером агентов в соответствии с внешними настройками для его запуска. Для активации через менеджер агентов, агент должен иметь класс, реализующий интерфейс Agent. |
Менеджер агентов (МА) | Это автономное приложение, предназначенное для централизованного планирования исполнения агентов, запускаемых на разных машинах в составе разных приложений и мониторинга их состояния. Через GUI менеджера можно задать "настройки агентов", а также увидеть сводные данные о статусе исполнения агентов, результатах их работы, протоколы ошибок. |
Клиент менеджера агентов (КМА) | Библиотека (jar), встраиваемая в конечные приложения для взаимодействия МА с приложением |
Приложение с агентами | Приложение с агентами должно включать в себя jar-библиотеку для удаленного взаимодействия с менеджером агентов. В зависимости от типа приложения, могут подключаться дополнительные библиотеки. В частности, библиотека для получения протоколов изменений документов CompanyMedia (ChLog) через JMS-очереди CM и библиотека для активации агентов, реализованных в виде spring-бинов. |
Пул серверов | Для распределения вычислительной нагрузки экземпляры приложений с агентами могут разворачиваться на множестве серверов, составляющих кластер балансировки. Менеджер агентов должен стремиться обеспечить запуск очередного агента на наименее загруженном сервере в кластере. Каждая НЗ должна быть ассоциорована с некоторым пулом серверов, определяющем кластер балансировки для данной НЗ. На каждом сервере пула должно быть установлено приложение с агентом, указанным в НЗ. В простой конфигурации пул может быть единым для всех НЗ. |
Message Oriented Middleware (MOM) | Инфраструктура для публикации и доставки JMS-сообщений с данными для агентов, а также для служебных сообщений. Реализуется сторонними продуктами. Предполагается использование Artemis ActiveMQ, т.к. его клиент встроен в WildFly. |
Очередь данных | JMS-Queue или JMS-Topic, через которую агент получает сообщения для обработки. В системе может быть несколько разных очередей данных, но отдельный агент за один запуск может получать сообщения только из одной очереди, управляемой МА. |
Системная очередь | JMS-Topic или JMS-Queue, через которые МА и КМА обмениваются служебными сообщениями. Системные очереди не durable. |
Сущности
Название сущности | Описание сущности |
---|---|
Очередь данных | Содержит имя JMS-очереди, в которую публикуются сообщения, которые должны обрабатывать агенты и тип очереди (Topic или Queue). Также содержит имя очереди для отложенной доставки и длительность задержки. Для агентов в режиме Delayed, в эту очередь будут копироваться сообщения предыдущей очереди, но с заголовком для отложенной доставки и идентификатором НЗ для фильтрации при приеме сообщений |
Дескриптор агента | Настройка содержит
Также включает в себя следующие режимы агента, основную часть из которых будет интерпретировать КМА. Тип входных данных
Если тип входных данных агента "JMS-сообщения", то дескритпор содержит:
Режим конкуренции
Политика наложения расписания. Определяет, что делать если предыдущий запуск агента не завершился и наступило новое время для запуска агента.
"Самостоятельный агент" может активироваться только по расписанию. Каждый "Дескриптор агента" связан с одним "Дескриптором Приложения". Для увеличения возможности масштабирования системы, агенты по JMS-сообщениям, в основной массе, должны разрабатываться для режима MANY и ASAP, либо Delayed. |
Настройка запуска (НЗ) | Каждый агент может активироваться по нескольким разным НЗ с разными параметрами. НЗ имеет разновидности:
Любая разновидность НЗ содержит:
Параметры должны быть типизированными и с возможностью выбора значений из классификаторов конечных приложений, таких, как модули из СС, Системные организации, Площадки. Значения параметров могут быть однозначными, либо массивами. В конечном итоге параметры будут передаваться КМА в JSON-формате вместе с сигналом на запуск агента. НЗ для "агента по расписанию" должна быть включена в одну или более "Групп агентов по расписанию" Настройка запуска ASAP/Delayed агентовМожет быть содана только для агентов с типом входных данных "JMS-сообщения".
Группа агентов по расписаниюСодержит
В группу могут входить только агенты
В режиме ANY вся группа выполняется на одном сервере. ASAP/Delayed агенты не могут входить в "группу агентов по расписанию" |
Дескриптор приложения | Содержит имя приложения (по-умолчанию имя ear-файла) и задает отдельное пространство имен для идентификаторов агентов. "Дескриптор приложения" связан с одним "Дескриптором кластера". Ссылка на дескриптор кластера не обязательная (см. п. "публикация агентов") |
Пул серверов | Содержит список имен хостов, взодящих в пул. Один и тотже хост может входить в несколько пулов. |