رجیستری ناشر قابل تنظیم

سرویس تله‌متری، رجیستری ناشر قابل پیکربندی را به عنوان وسیله‌ای ثانویه برای جمع‌آوری داده‌ها ارائه می‌دهد. برنامه‌ها و سرویس‌ها می‌توانند خود را به عنوان ناشران تله‌متری در رجیستری ثبت کنند، که به نوبه خود آنها را در دسترس سرویس تله‌متری قرار می‌دهد. برای اطلاعات بیشتر در مورد انواع منابع داده‌ای که ما پشتیبانی می‌کنیم، به منابع داده مراجعه کنید.

کتابخانه

تله‌متری از طریق Binder با ناشران Configurable Publisher Registry ارتباط برقرار می‌کند. به جای پیاده‌سازی دستی رابط‌های AIDL، اکیداً توصیه می‌کنیم از کتابخانه آزمایشی Configurable Publisher Registry که بخشی از Telemetry SDK ما است، استفاده کنید. این کتابخانه رابط‌های AIDL را حذف کرده و یک API تمیز و از نظر نوع ایمن برای تعریف ناشران، انتشار داده‌های تله‌متری و مدیریت تبدیل پیام‌های protobuf به فرمت سیمی آنها ارائه می‌دهد.

برای اطلاعات بیشتر در مورد استفاده از کتابخانه، به کتابخانه رجیستری ناشر قابل پیکربندی مراجعه کنید.

پیاده‌سازی و ثبت ناشر دستی

اگر ترجیح می‌دهید از کتابخانه‌ی ارائه شده استفاده نکنید، می‌توانید رابط‌های Binder لازم را به صورت دستی پیاده‌سازی کنید. بخش‌های زیر مروری بر مراحل مورد نیاز برای پیاده‌سازی یک ناشر و ثبت آن در رجیستری ناشر قابل پیکربندی ارائه می‌دهند.

ثبت نام

برخلاف سرویس‌های SDV که فراداده‌های خود، مانند ساختار پیام، را در VSIDL تعریف کرده و در دسترس سیستم قرار می‌دهند، ناشرانی که از رجیستری ناشر قابل پیکربندی استفاده می‌کنند، باید فراداده‌های خود را صریحاً ارائه دهند. شما این فراداده را از طریق شیء PublisherInfo در حین ثبت‌نام ارائه می‌دهید.

شما این ناشران را با استفاده از رابط IConfigurablePublisherRegistry AIDL ثبت می‌کنید. به این ترتیب، می‌توانید ناشران را به هر زبانی که AIDL پشتیبانی می‌کند، از جمله جاوا، 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 نامگذاری شده است) پیامی است که این ناشر منتشر می‌کند و تمام وابستگی‌های لازم آن. سرویس Telemetry از توصیفگر پیام برای deserialize کردن داده‌های ارسال شده توسط ناشر استفاده می‌کند. برای اطلاعات بیشتر در مورد تولید این در زمان ساخت، به ابزار تولیدکننده توصیفگر جاوا protobuf مراجعه کنید.
messageTypeName نام کامل پیام‌های protobuf که ناشر شما منتشر می‌کند. توصیفگر پیام این پیام باید در fileDescriptorSet تعریف شود.
supportsGet نشان می‌دهد که آیا ناشر می‌تواند آخرین پیام را بدون اشتراک در آن ارائه دهد یا خیر.

پیاده‌سازی

ناشر سفارشی شما باید رابط IConfigurablePublisher را با ارائه متدهای زیر پیاده‌سازی کند:

  • سرویس Telemetry در صورتی که connection_type منبع داده برای این ناشر در پیکربندی metrics روی SUBSCRIPTION تنظیم شده باشد، createSubscription برای عضویت در یک ناشر فراخوانی می‌کند. آرگومان ISubscriber که به ناشر شما ارسال می‌شود، یک متد sendData(in byte[] data) ارائه می‌دهد که می‌توانید از آن برای ارسال پیام‌های protobuf به سرویس Telemetry استفاده کنید.

    IConfigurablePublisherSubscription createSubscription(in ISubscriber subscriber, in @nullable byte[] configuration)
    
  • سرویس Telemetry متد getLatestMessage را برای دریافت آخرین پیام یک ناشر فراخوانی می‌کند، اگر connection_type منبع داده برای این ناشر در پیکربندی metrics روی ON_DEMAND تنظیم شده باشد. سرویس Telemetry فقط در صورتی از این متد استفاده می‌کند که PublisherInfo ناشر، supportsGet = true را نشان دهد.

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

سرویس تله‌متری، آرگومان configuration را روی گزینه configuration منبع داده در پیکربندی معیارها تنظیم می‌کند.