Rejestr wydawców z możliwością konfiguracji

Usługa telemetrii udostępnia konfigurowalny rejestr wydawców jako dodatkowy sposób zbierania danych. Aplikacje i usługi mogą zarejestrować się w rejestrze jako wydawcy danych telemetrycznych, co z kolei udostępnia je usłudze telemetrii. Więcej informacji o typach obsługiwanych źródeł danych znajdziesz w artykule Źródła danych.

Biblioteka

Telemetria komunikuje się z wydawcami konfigurowalnego rejestru wydawców za pomocą interfejsu Binder. Zamiast ręcznie implementować interfejsy AIDL, zdecydowanie zalecamy korzystanie z eksperymentalnej biblioteki konfigurowalnego rejestru wydawców, która jest częścią naszego pakietu SDK telemetrii. Biblioteka ta abstrahuje interfejsy AIDL i udostępnia przejrzysty, bezpieczny typowo interfejs API do definiowania wydawców, publikowania danych telemetrycznych i zarządzania konwersją komunikatów protobuf na format przewodowy.

Więcej informacji o korzystaniu z biblioteki znajdziesz w artykule Konfigurowalny rejestr wydawców biblioteki.

Ręczna implementacja i rejestracja wydawcy

Jeśli nie chcesz korzystać z udostępnionej biblioteki, możesz ręcznie zaimplementować niezbędne interfejsy Binder. W kolejnych sekcjach znajdziesz omówienie czynności wymaganych do zaimplementowania wydawcy i zarejestrowania go w konfigurowalnym rejestrze wydawców.

Rejestracja

W przeciwieństwie do usług SDV, które mają metadane (np. strukturę wiadomości) zdefiniowane w VSIDL i dostępne dla systemu, wydawcy korzystający z konfigurowalnego rejestru wydawców muszą wyraźnie podać swoje metadane. Podczas rejestracji podajesz te metadane za pomocą obiektu PublisherInfo.

Rejestrujesz tych wydawców za pomocą interfejsu IConfigurablePublisherRegistry AIDL. Dzięki temu możesz pisać wydawców w dowolnym języku obsługiwanym przez AIDL, w tym w języku Java, C++ i Rust. Interfejs udostępnia 2 metody:

  • Użyj metody registerPublisher, aby zarejestrować nowego wydawcę w usłudze telemetrii:

    void registerPublisher(in PublisherInfo publisherInfo, in IConfigurablePublisher publisher)
    
  • Użyj metody unregisterPublisher, aby wyrejestrować wcześniej zarejestrowanego wydawcę z usługi telemetrii:

    void unregisterPublisher(in @utf8InCpp String serviceName)
    

Obiekt PublisherInfo określa podstawowe informacje o wydawcy:

Pole Opis
serviceName Nazwa wydawcy zdefiniowana przez użytkownika. Użyj tej nazwy, aby odwoływać się do niej w konfiguracjach statystyk.
fileDescriptorSet Zserializowany obiekt google.protobuf.FileDescriptorSet (więcej informacji znajdziesz w artykule Samoopisujące się wiadomości), który zawiera opis wiadomości (nazwany polem messageTypeName) publikowanej przez tego wydawcę oraz wszystkie niezbędne zależności. Usługa telemetrii używa opisu wiadomości do deserializacji danych wysyłanych przez wydawcę. Więcej informacji o generowaniu tego podczas kompilacji znajdziesz w artykule Narzędzie do generowania opisów protobuf w języku Java.
messageTypeName Pełna nazwa komunikatów protobuf publikowanych przez wydawcę. Opis wiadomości musi być zadeklarowany w fileDescriptorSet.
supportsGet Wskazuje, czy wydawca może udostępnić najnowszą wiadomość bez subskrybowania jej.

Implementacja

Twój niestandardowy wydawca musi zaimplementować interfejs IConfigurablePublisher, udostępniając te metody:

  • Usługa telemetrii wywołuje metodę createSubscription, aby zasubskrybować wydawcę, jeśli connection_type źródła danych dla tego wydawcy w konfiguracji statystyk jest ustawiony na SUBSCRIPTION. Argument ISubscriber przekazywany do wydawcy udostępnia metodę sendData(in byte[] data), której możesz użyć do przesyłania strumieniowego komunikatów protobuf do usługi telemetrii.

    IConfigurablePublisherSubscription createSubscription(in ISubscriber subscriber, in @nullable byte[] configuration)
    
  • Usługa telemetrii wywołuje metodę getLatestMessage, aby pobrać najnowszą wiadomość wydawcy, jeśli connection_type źródła danych dla tego wydawcy w konfiguracji statystyk jest ustawiony na ON_DEMAND. Usługa telemetrii używa tej metody tylko wtedy, gdy PublisherInfo wydawcy wskazuje supportsGet = true.

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

Usługa telemetrii ustawia argument configuration na opcję configuration źródła danych w konfiguracji statystyk.