Pub/Sub ट्रिगर


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);
});