टेलीमेट्री सेवा, डेटा कलेक्शन के लिए, कॉन्फ़िगर किया जा सकने वाला पब्लिशर रजिस्ट्री को दूसरे तरीके के तौर पर उपलब्ध कराती है. ऐप्लिकेशन और सेवाएं, रजिस्ट्री में खुद को टेलीमेट्री पब्लिशर के तौर पर रजिस्टर कर सकती हैं. इससे, वे टेलीमेट्री सेवा के लिए उपलब्ध हो जाती हैं. हम किस तरह के डेटा सोर्स के साथ काम करते हैं, इस बारे में ज़्यादा जानने के लिए, डेटा सोर्स देखें.
लाइब्रेरी
टेलीमेट्री, Binder के ज़रिए, कॉन्फ़िगर किया जा सकने वाला पब्लिशर रजिस्ट्री के पब्लिशर से कम्यूनिकेट करती है. हमारा सुझाव है कि AIDL इंटरफ़ेस को मैन्युअल तरीके से लागू करने के बजाय, टेलीमेट्री SDK का हिस्सा होने वाली, कॉन्फ़िगर किया जा सकने वाला पब्लिशर रजिस्ट्री लाइब्रेरी का इस्तेमाल करें. यह लाइब्रेरी, प्रयोग के तौर पर उपलब्ध है. यह लाइब्रेरी, AIDL इंटरफ़ेस को ऐब्स्ट्रैक्ट करती है. साथ ही, पब्लिशर तय करने, टेलीमेट्री डेटा पब्लिश करने, और प्रोटोबफ़ मैसेज को उनके वायर फ़ॉर्मैट में बदलने की प्रोसेस को मैनेज करने के लिए, साफ़ और टाइप-सेफ़ एपीआई उपलब्ध कराती है.
लाइब्रेरी के इस्तेमाल के बारे में ज़्यादा जानने के लिए, कॉन्फ़िगर किया जा सकने वाला पब्लिशर रजिस्ट्री लाइब्रेरी देखें.
पब्लिशर को मैन्युअल तरीके से लागू करना और रजिस्टर करना
अगर आपको उपलब्ध कराई गई लाइब्रेरी का इस्तेमाल नहीं करना है, तो ज़रूरी Binder इंटरफ़ेस को मैन्युअल तरीके से लागू किया जा सकता है. यहां दिए गए सेक्शन में, पब्लिशर को लागू करने और उसे कॉन्फ़िगर किया जा सकने वाला पब्लिशर रजिस्ट्री में रजिस्टर करने के लिए ज़रूरी चरणों की खास जानकारी दी गई है.
रजिस्ट्रेशन
एसडीवी सेवाओं के उलट, कॉन्फ़िगर किया जा सकने वाला पब्लिशर रजिस्ट्री का इस्तेमाल करने वाले पब्लिशर को अपना मेटाडेटा साफ़ तौर पर देना होगा. एसडीवी सेवाओं का मेटाडेटा, जैसे कि मैसेज स्ट्रक्चर, वीएसआईडीएल में तय किया जाता है और यह सिस्टम के लिए उपलब्ध होता है. रजिस्ट्रेशन के दौरान, PublisherInfo ऑब्जेक्ट के ज़रिए यह मेटाडेटा दिया जाता है.
IConfigurablePublisherRegistry
AIDL इंटरफ़ेस का इस्तेमाल करके, इन पब्लिशर को रजिस्टर किया जाता है. इसलिए, पब्लिशर को किसी भी ऐसी भाषा में लिखा जा सकता है जिसे 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 प्रोटोबफ़ डिस्क्रिप्टर जनरेटर टूल देखें. |
messageTypeName |
प्रोटोबफ़ मैसेज का पूरा नाम, जिसे आपका पब्लिशर पब्लिश करता है. इस मैसेज का मैसेज डिस्क्रिप्टर, fileDescriptorSet में बताया जाना चाहिए. |
supportsGet |
इससे पता चलता है कि पब्लिशर, सदस्यता लिए बिना भी सबसे नया मैसेज उपलब्ध करा सकता है या नहीं. |
लागू करना
आपके कस्टम पब्लिशर को, IConfigurablePublisher इंटरफ़ेस को लागू करना होगा. इसके लिए, उसे ये तरीके उपलब्ध कराने होंगे:
अगर मेट्रिक के कॉन्फ़िगरेशन में, इस पब्लिशर के डेटा सोर्स का
connection_type,SUBSCRIPTIONपर सेट है, तो टेलीमेट्री सेवा, किसी पब्लिशर की सदस्यता लेने के लिए,createSubscriptionको कॉल करती है. आपके पब्लिशर को पास किया गयाISubscriberआर्ग्युमेंट,sendData(in byte[] data)तरीका उपलब्ध कराता है. इसका इस्तेमाल करके, प्रोटोबफ़ मैसेज को टेलीमेट्री सेवा में स्ट्रीम किया जा सकता है.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 विकल्प पर सेट करती है.