Пример messagebus

27 января 2025

ID appendix_messagebus_example

Пример демонстрирует использование компонента MessageBus в KasperskyOS.

В этом примере программы Publisher, SubscriberA и SubscriberB используют компонент MessageBus для обмена сообщениями:

messagebus_example

Пример использования компонента MessageBus в решении на базе KasperskyOS

Компонент MessageBus реализует шину сообщений, которая обеспечивает прием, распределение и доставку сообщений между программами. Использование шины сообщений в решениях на базе KasperskyOS позволяет, например, легко масштабировать рассылку сообщений для большего количества подписчиков. Шина сообщений может обрабатывать большие объемы сообщений и распределять их эффективно между получателями.

Уровень журналирования для компонента MessageBus устанавливается переменной окружения LOG_LEVEL, которая задана в файле ./einit/CMakeLists.txt. Для этой переменной допустимы следующие значения:

  • LOG_TRACE
  • LOG_DEBUG
  • LOG_INFO (значение по умолчанию)
  • LOG_WARNING
  • LOG_ERROR
  • LOG_CRITICAL
  • LOG_OFF

Программа Publisher является издателем и передает сообщения в шину:

  1. Для получения интерфейса регистрации издателя в шине сообщений используется метод IProviderFactory::CreateBusControl().
  2. Для получения интерфейса, содержащего методы для отправки издателем сообщений в шину, используется метод IProviderFactory::CreateBus().
  3. Для регистрации издателя в шине сообщений используется метод IProviderControl::RegisterPublisher().
  4. Для оправки сообщений в шину используется метод IProvider::Push().
  5. Для дерегистрации издателя в шине сообщений используется метод IProviderControl::UnregisterPublisher().

Программы SubscriberA и SubscriberB являются подписчиками и получают сообщения из шины:

  1. Для получения интерфейса регистрации подписчика в шине сообщений используется метод IProviderFactory::CreateBusControl().
  2. Для получения интерфейсов, содержащих методы для получения подписчиком сообщений из шины используется метод IProviderFactory::CreateSubscriberRunner().
  3. Для регистрации подписчика в шине сообщений используется метод IProviderControl::RegisterSubscriber().
  4. Чтобы перевести подписчика в режим ожидания сообщения от шины используется метод ISubscriberRunner::Run().
  5. При получении сообщения из шины вызывается метод ISubscriber::OnMessage().
  6. Для дерегистрации подписчика в шине сообщений используется метод IProviderControl::UnregisterSubscriber().

Пример также демонстрирует использование разных виртуальных файловых систем (далее VFS) в одном решении. В примере для доступа к функциям работы с файловой системой и функциям работы с сетью используются разные VFS:

  • Для работы с сетью используется программа VfsNet.
  • Для работы с файловой системой используется программа VfsSdCardFs.

Программа kl.Ntpd поставляется в составе KasperskyOS Community Edition и представляет собой реализацию ntp-клиента, который в фоновом режиме получает параметры времени от внешних ntp-серверов и передает их ядру KasperskyOS.

Программа kl.rump.Dhcpcd поставляется в составе KasperskyOS Community Edition и представляет собой реализацию DHCP-клиента, который в фоновом режиме получает параметры сетевых интерфейсов от внешнего DHCP-сервера и передает их виртуальной файловой системе.

Для сборки и запуска примера используется система CMake из состава KasperskyOS Community Edition.

Файлы примера

Код примера и скрипты для сборки находятся по следующему пути:

/opt/KasperskyOS-Community-Edition-<version>/examples/messagebus

Сборка и запуск примера

См. "Сборка и запуск примеров".

Для корректной работы примера messagebus на Raspberry Pi после сборки примера и подготовки загрузочной SD-карты требуется выполнить следующие действия:

  • создать директорию /lib на загрузочной SD-карте, если этой директории не существует;
  • скопировать в директорию /lib на загрузочной SD-карте содержимое директории build/hdd/lib, которая генерируется во время сборки примера.

Вам помогла эта статья?
Что нам нужно улучшить?
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!