Google Cloud का Pub/Sub, दुनिया भर में डिस्ट्रिब्यूट किया जाने वाला मैसेज बस है. यह आपकी ज़रूरत के हिसाब से अपने-आप स्केल हो जाता है. आपके पास ऐसा फ़ंक्शन बनाने का विकल्प है जो functions.pubsub
का इस्तेमाल करके, Pub/Sub इवेंट को मैनेज करता है.
Pub/Sub फ़ंक्शन को ट्रिगर करना
जब भी किसी खास विषय पर नया Pub/Sub मैसेज भेजा जाता है, तो आपके पास कोई फ़ंक्शन ट्रिगर करने का विकल्प होता है. आपको वह Pub/Sub विषय का नाम बताना होगा जिससे आपको अपना फ़ंक्शन ट्रिगर करना है. साथ ही, onPublish()
इवेंट हैंडलर में इवेंट सेट करना होगा:
exports.helloPubSub = functions.pubsub.topic('topic-name').onPublish((message) => { // ... });
Pub/Sub मैसेज के पेलोड को ऐक्सेस करना {:#access-pub/sub}
Pub/Sub मैसेज के लिए, आपके फ़ंक्शन में दिखाए गए Message
ऑब्जेक्ट से पेलोड को ऐक्सेस किया जा सकता है. Pub/Sub मैसेज के मुख्य हिस्से में JSON वाले मैसेज के लिए, Cloud Functions के लिए Firebase SDK टूल में मैसेज को डिकोड करने के लिए एक हेल्पर प्रॉपर्टी होती है. उदाहरण के लिए, यहां एक सामान्य JSON पेलोड के साथ पब्लिश किया गया मैसेज दिया गया है:
gcloud pubsub topics publish topic-name --message '{"name":"Xenia"}'
json
प्रॉपर्टी की मदद से, JSON डेटा पेलोड को इस तरह ऐक्सेस किया जा सकता है:
// Get the `name` attribute of the PubSub message JSON body. let name = null; try { name = message.json.name; } catch (e) { functions.logger.error('PubSub message was not JSON', e); }
JSON के अलावा, अन्य पेलोड Pub/Sub मैसेज में शामिल होते हैं. ये मैसेज ऑब्जेक्ट में, base64 कोड में बदली गई स्ट्रिंग के तौर पर होते हैं. इस तरह के मैसेज को पढ़ने के लिए, आपको Base64 कोड में बदली गई स्ट्रिंग को डिकोड करना होगा. इसके लिए, यह तरीका अपनाएं:
gcloud pubsub topics publish topic-name --message 'MyMessage'
// Decode the PubSub Message body. const messageBody = message.data ? Buffer.from(message.data, 'base64').toString() : null;
मैसेज के एट्रिब्यूट ऐक्सेस करना {:#access-message}
Pub/Sub मैसेज को पब्लिश करने के लिए दिए गए निर्देश में सेट किए गए डेटा एट्रिब्यूट के साथ भेजा जा सकता है. उदाहरण के लिए, name
एट्रिब्यूट के साथ मैसेज पब्लिश किया जा सकता है:
gcloud pubsub topics publish topic-name --attribute name=Xenia
Message.attributes
से ऐसे एट्रिब्यूट पढ़े जा सकते हैं:
// Get the `name` attribute of the message. const name = message.attributes.name;
आपको पता चल सकता है कि Message.attributes
में मैसेज आईडी या मैसेज पब्लिश करने का समय जैसा कुछ बुनियादी डेटा उपलब्ध नहीं है. इस समस्या को हल करने के लिए, ट्रिगर करने वाले इवेंट के EventContext
में जाकर, यह जानकारी ऐक्सेस की जा सकती है.
उदाहरण के लिए:
exports.myFunction = functions.pubsub.topic('topic1').onPublish((message, context) => {
console.log('The function was triggered at ', context.timestamp);
console.log('The unique ID for the event is', context.eventId);
});