遥测服务提供可配置的发布者注册表,作为数据收集的辅助手段。应用和服务可以在注册表中将自己注册为遥测发布者,这反过来又使它们可供遥测服务使用。如需详细了解我们支持的数据源类型,请参阅数据源。
媒体库
遥测通过 Binder 与可配置的发布者注册表发布者进行通信。我们强烈建议您使用实验性的可配置的发布者注册表库(属于我们的遥测 SDK),而不是手动实现 AIDL 接口。该库可抽象出 AIDL 接口,并提供干净且类型安全的 API,用于定义发布者、发布遥测数据以及管理 protobuf 消息到其有线格式的转换。
如需详细了解如何使用该库,请参阅可配置的发布商注册表库。
手动发布商实现和注册
如果您不想使用提供的库,可以手动实现必要的 Binder 接口。以下部分简要介绍了实现发布者并将其注册到可配置的发布者注册表所需的步骤。
注册
与在 VSIDL 中定义了元数据(例如消息结构)并可供系统使用的 SDV 服务不同,使用可配置发布者注册表的发布者必须明确提供其元数据。您可以在注册期间通过 PublisherInfo 对象提供此元数据。
您可以使用 IConfigurablePublisherRegistry
AIDL 接口注册这些发布者。因此,您可以使用 AIDL 支持的任何语言(包括 Java、C++ 和 Rust)编写发布者。该接口提供两种方法:
使用
registerPublisher方法向 Telemetry 服务注册新的发布者:void registerPublisher(in PublisherInfo publisherInfo, in IConfigurablePublisher publisher)使用
unregisterPublisher方法从 Telemetry 服务中取消注册之前注册的发布者:void unregisterPublisher(in @utf8InCpp String serviceName)
PublisherInfo 对象用于指定发布商的基本信息:
| 字段 | 说明 |
|---|---|
serviceName |
发布者的用户定义名称。使用此名称从指标配置中引用发布者。 |
fileDescriptorSet |
一个序列化的 google.protobuf.FileDescriptorSet(如需了解详情,请参阅自描述消息),其中包含相应发布者发布的消息的消息描述符(由 messageTypeName 字段命名)及其所有必需的依赖项。遥测服务使用消息描述符来反序列化发布者发送的数据。如需详细了解如何在构建时生成此数据,请参阅 Java protobuf 描述符生成器工具。 |
messageTypeName |
发布方发布的 protobuf 消息的全名。此消息的消息描述符必须在 fileDescriptorSet 中声明。 |
supportsGet |
表示发布者是否可以在不订阅最新消息的情况下提供该消息。 |
实现
您的自定义发布商必须通过提供以下方法来实现 IConfigurablePublisher 接口:
如果指标配置中相应发布者的数据源的
connection_type设置为SUBSCRIPTION,则遥测服务会调用createSubscription来订阅发布者。传递给发布者的ISubscriber实参提供了一个sendData(in byte[] data)方法,您可以使用该方法将 protobuf 消息流式传输到 Telemetry 服务。IConfigurablePublisherSubscription createSubscription(in ISubscriber subscriber, in @nullable byte[] configuration)如果指标配置中相应发布者的数据源的
connection_type设置为ON_DEMAND,遥测服务会调用getLatestMessage来提取发布者的最新消息。仅当发布者的PublisherInfo指示supportsGet = true时,遥测服务才会使用此方法。@nullable byte[] getLatestMessage(in @nullable byte[] configuration)
遥测服务会将 configuration 实参设置为指标配置中数据源的 configuration 选项。