Настраиваемый реестр издателей

Служба телеметрии предоставляет настраиваемый реестр издателей в качестве дополнительного средства сбора данных. Приложения и службы могут зарегистрироваться в реестре в качестве издателей телеметрии, что, в свою очередь, делает их доступными для службы телеметрии. Дополнительную информацию о поддерживаемых типах источников данных см. в разделе «Источники данных» .

Библиотека

Телеметрия взаимодействует с издателями Configurable Publisher Registry через Binder. Вместо ручной реализации интерфейсов AIDL мы настоятельно рекомендуем использовать экспериментальную библиотеку Configurable Publisher Registry, которая является частью нашего SDK для телеметрии . Библиотека абстрагирует интерфейсы AIDL и предоставляет чистый, типобезопасный API для определения издателей, публикации телеметрических данных и управления преобразованием сообщений protobuf в их формат для передачи по сети.

Для получения дополнительной информации об использовании библиотеки см. раздел «Библиотека настраиваемого реестра издателя» .

Ручная реализация и регистрация издателей.

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

Регистрация

В отличие от сервисов SDV, метаданные которых, такие как структура сообщений, определены в VSIDL и доступны системе, издатели, использующие настраиваемый реестр издателей, должны явно предоставлять свои метаданные. Эти метаданные предоставляются через объект PublisherInfo во время регистрации.

Регистрация этих издателей осуществляется с помощью интерфейса AIDL IConfigurablePublisherRegistry . Таким образом, вы можете писать издателей на любом языке, поддерживаемом AIDL, включая Java, C++ и Rust. Интерфейс предоставляет два метода:

  • Для регистрации нового издателя в службе телеметрии используйте метод registerPublisher :

    void registerPublisher(in PublisherInfo publisherInfo, in IConfigurablePublisher publisher)
    
  • Используйте метод unregisterPublisher для отмены регистрации ранее зарегистрированного издателя в службе телеметрии:

    void unregisterPublisher(in @utf8InCpp String serviceName)
    

Объект PublisherInfo содержит основную информацию об издателе:

Поле Описание
serviceName Пользовательское имя издателя. Используйте это имя для ссылки на него в настройках метрик.
fileDescriptorSet Сериализованный объект google.protobuf.FileDescriptorSet (подробнее см. в разделе «Самоописывающиеся сообщения »), содержащий дескриптор сообщения (названный по полю messageTypeName ) для сообщения, публикуемого этим издателем, и все необходимые зависимости. Служба телеметрии использует дескриптор сообщения для десериализации данных, отправляемых издателем. Дополнительную информацию о создании этого объекта во время сборки см. в разделе «Инструмент генерации дескрипторов Java protobuf» .
messageTypeName Полное имя сообщений protobuf, которые публикует ваш издатель. Дескриптор этого сообщения должен быть объявлен в fileDescriptorSet .
supportsGet Указывает, может ли издатель предоставлять последнее сообщение без подписки на него.

Выполнение

Ваш пользовательский издатель должен реализовывать интерфейс IConfigurablePublisher , предоставив следующие методы:

  • Служба телеметрии вызывает createSubscription для подписки на издателя, если параметр connection_type источника данных для этого издателя в конфигурации метрик установлен на SUBSCRIPTION . Аргумент ISubscriber , передаваемый вашему издателю, предоставляет метод sendData(in byte[] data) , который можно использовать для потоковой передачи сообщений protobuf в службу телеметрии.

    IConfigurablePublisherSubscription createSubscription(in ISubscriber subscriber, in @nullable byte[] configuration)
    
  • Служба телеметрии вызывает getLatestMessage для получения последнего сообщения от издателя, если параметр connection_type источника данных для этого издателя в конфигурации метрик установлен на ON_DEMAND . Служба телеметрии использует этот метод только в том случае, если PublisherInfo издателя указано supportsGet = true .

    @nullable byte[] getLatestMessage(in @nullable byte[] configuration)
    

Служба телеметрии устанавливает аргумент configuration в соответствии с параметром configuration источника данных в конфигурации метрик.