SObjectizer
5.1
|
gemont_2: Версия 2.0.0.
Для 4-го поколения SObjectizer была написана дополнительная библиотека распространения сообщений мониторинговой информации, которая получила название GEMONT. Идея GEMONT заключалась в выполнении таких задач, как фиксация мониторинговой информации, передача её заинтересованным сторонам в виде SObjectizer сообщений. При переходе на SObjectizer 5-го поколения функциональность библиотеки была перенесена с учётом, как всех реализованных возможностей, так и с добавлением некоторых новых требований. Таким образом, библиотека gemont_2 представляет из себя расширенную версию gemont_1 и, в терминах SObjectizer 5, представляет собой слой gemont_layer для работы с библиотекой, реализацию базовых типов источников данных и базовый агент-ретранслятор сообщений мониторинговой информации.
Ключевым элементом gemont_2, так же как и gemont_1, по прежнему является понятие источника данных. Источник данных — это именованная сущность, которая содержит текущее значение. Изменение источника данных приводит к распространению нового значения. В программе источники данных представляются в виде объектов класса шаблонного scalar_data_source_t. Например:
Из данного примера видно, что источник данных содержит в себе информацию о своём имени, имени класса данных и текущем значении. Так же источнику передаётся ссылка на слой gemont, с которым соотносится далее в результате регистрции. Сообщения мониторинговой информации об изменении значение отправляются на специальный mbox указанного слоя.
Нужно отметить, что параметром шаблонна scalar_data_source_t могут быть следующие типы данных:
Сообщения gemont_2 бывают трёх типов: msg_reg_data_source, msg_dereg_data_source и msg_scalar_value. Их можно получить, подписавшись на предназначенный для этого mbox слоя gemont_2. Для примера см. Ретранслятор. Сообщения первых двух типов отправляются в момент начала работы источника данных и завершения соответственно. Сообщение msg_scalar_value, в свою очередь, отсылается при изменении значения источника данных.
Сообщение msg_reg_data_source является уведомлением о появлении нового источника данных. Сообщение имеет следующие атрибуты:
Сообщение msg_dereg_data_source уведомляет об исчезновении источника данных. В нем передается лишь имя и уникальный идентификатор исчезнувшего источника.
Сообщение msg_scalar_value уведомляет о новом значении источника данных. Сам источник данных указывается при помощи уникального идентификатора, в поле m_value
содержится новое значение, а время изменения – в m_timestamp
.
Если необходимо получить дополнительную информацию об источнике данных по его идентификатору, можно воспользоваться методом gemont_layer_t::sources(), который возвращает объект sources_list_t, который содержит информацию обо всех именах источников данных. Например:
В результате выполнения данного фрагмента на консоль будет выведено имя источника данных, идентификатор которого был получен в сообщении.
Значение источника данных хранится в качестве реализации интерфейса data_source_value_t для одного из поддерживаемых типов. Тип конкретного значения можно получить через атрибут интерфейса data_source_value_t::m_data_source_type. Возможные значения этого атрибута содержатся в перечислении data_source_type::types_t. Такой подход позволяет иметь по одному типу уведомительного сообщения о создании и изменении источника данных: msg_reg_data_source и msg_scalar_value. Само значение конкретного типа можно получить при помощи методов data_source_value_t::query_value(). Если тип запрашиваемого значения не совпадает с типом, который реально хранится в объекте, то будет выброшено исключение.
Слой gemont_2 представляется классом gemont_layer_t. Его задача контролировать регистрацию и дерегистрацией источников данных, для чего он хранит таблицу зарегистрированных источников данных. Помимо этого слой так же содержит в себе специальный mbox, на который приходят сообщения мониторинговой информации об изменениях значений источников данных. Доступ к этому mbox-у предоставляется при помощи – gemont_layer_t::dafault_mbox(). Агент, подписавшийся на gemont-сообщения от данного mbox-а, будет получать сообщения о регистрации новых и дерегистрации существующих в таблице источников, а также об их изменениях.
Таблица имен источников данных представляется типом sources_list_t, который соотносит каждый уникальный идентификатор source_id_t с именем источника данных. Доступ к этой таблице происходит при помощи метода gemont_layer_t::sources().
Третьей важной частью gemont_2 является базовый ретранслятор, который представляется абстрактным классом a_retranslator_base_t и представляет из себя агент, основная цель которого - передача актуального списка источников данных и их значений.
Механизм работы ретранслятора заключается в следующем. Во время старта агент опрашивает слой gemont_2 на предмет таблицы источников данных и составляет свою таблицу, которая дополнительно хранит текущие значения источников. Так же, как и слой gemont_2, ретранслятор поддерживает таблицу в актуальном состоянии. Все данные об изменениях, в свою очередь, передаются в соответствующие методы ( по обновлению значение источника – a_retranslator_base_t::on_update(), по регистрации источника – a_retranslator_base_t::on_reg(), по дерегистрации – a_retranslator_base_t::on_dereg()). Таким образом, наследование от a_retranslator_base_t с переопределением вышеперечисленных методов предоставляет интерфейс к получению информации о текущем состоянии мониторинговых данных.
Стоит отметить, что реализация ретранслятора позволяет ограничить поток сообщений по частоте в случаях, когда такое поведение нежелательно. По умолчанию ретранслятор обращается к a_retranslator_base_t::on_update() не чаще, чем раз в 250мс (значение определяется параметром sending_time_interval конструктора). Сообщение пришедшее раньше указанного промежутка времени будет отложено до окончания периода. В случае с несколькими сообщениями, в конце периода будет отправлено последнее из пришедших значений.
Документация по SObjectizer v.5.1 'Джимара'. Последние изменения: Ср 15 Май 2013 12:56:21. Создано системой 1.8.3.1 |