आरबीएम एजेंट को तेज़ी से आगे बढ़ाने की सुविधा का इस्तेमाल करने का तरीका

आरबीएम एजेंट को Google Cloud Pub/Sub के साथ पब्लिश होने/सदस्यता लेने के संबंध में मैसेज और इवेंट मिलते हैं. जब कोई उपयोगकर्ता आपके एजेंट के मैसेज पर जवाब देता है, तो आरबीएम प्लैटफ़ॉर्म उन मैसेज को Pub/Sub के एक ऐसे खास विषय पर पब्लिश करता है जिसका ऐक्सेस सिर्फ़ आपके एजेंट को मिलता है. आपका एजेंट, उस खास विषय से जुड़ी सदस्यता के ज़रिए उन मैसेज और इवेंट को ऐक्सेस करता है.

Pub/Sub दो तरह की सदस्यताओं के साथ काम करता है: push और pull. पुश सदस्यता की मदद से, Cloud Pub/Sub आपके कॉन्फ़िगर किए गए वेबहुक यूआरएल पर मैसेज भेजता है. एक पुल सदस्यता के साथ, एक लंबे समय तक चलने वाले मैसेज पहचानकर्ता बनाने और मैसेज पाते ही उन्हें स्वीकार करने के लिए आपको कोड लिखना होगा.

ज़्यादातर डेवलपर के लिए, पुश नोटिफ़िकेशन एक बेहतर विकल्प है. अगर आपने तीसरे पक्ष के एपीआई का इस्तेमाल किया है, तो हो सकता है कि आपने कॉलबैक/वेबहुक यूआरएल के साथ काम किया हो. हालांकि, यह तरीका आसान है. इसके लिए सार्वजनिक तौर पर मौजूद यूआरएल ज़रूरी है, जो डेवलपर को हर बार किसी बदलाव की जांच करने के लिए, वेब सर्वर को डिप्लॉय करने देता है.

इस लेख में, मैं आपको Google Cloud के App Engine के साथ, स्थानीय सदस्यता के लिए पुल की सदस्यता सेट करने का तरीका बता रहा हूं. साथ ही, इसे प्रोडक्शन एनवायरमेंट में इस्तेमाल करने का तरीका भी बता रहा हूं.

पुल की सदस्यता के लिए Pub/Sub को कॉन्फ़िगर करना

अगर आपने पहले से अपने एजेंट के लिए Pub/Sub को कॉन्फ़िगर नहीं किया है, तो अपनी शुरुआती सदस्यता बनाने के लिए Cloud Pub/Sub के निर्देशों का पालन करें.

सदस्यता बनाने के बाद, पुश से सिर्फ़ एक पुल मॉडल का इस्तेमाल करें. Google Cloud Console पर जाएं. इसके बाद, Pub/Sub > सदस्यताएं सेक्शन पर जाएं. अपने एजेंट के लिए बनाई गई सदस्यता के बगल में दिए गए ओवरफ़्लो मेन्यू पर क्लिक करें और बदलाव करें चुनें. आपको नीचे दी गई इमेज से मिलती-जुलती कॉन्फ़िगरेशन स्क्रीन दिखेगी.

सदस्यता विवरण

डिलीवरी का टाइप को पुल करें पर सेट करें और सेव करें पर क्लिक करें.

एसिंक्रोनस पुल सदस्यता हैंडलर सेट करना

इसके बाद, सदस्यता से मैसेज पाने के लिए, आपको आरबीएम एजेंट को अपडेट करना होगा. अलग-अलग प्रोग्रामिंग भाषाओं में इस काम को करने का तरीका जानने के लिए, एसिंक्रोनस पुल में जाएं. इसके अलावा, आरबीएम एजेंट के कुछ नमूने पर भी एक नज़र डालें, जिनमें से कई पुल मॉडल का इस्तेमाल करते हैं.

नीचे दिए गए कोड में, Node.js पर एसिंक्रोनस पुल लिसनर को सेट अप करने का तरीका बताया गया है:

function initPubsub() {
    let pubsub = new PubSub({
        projectId: REPLACE_WITH_GCP_PROJECT_ID,
        keyFilename: REPLACE_WITH_SERVICE_ACCOUNT_KEY_FILE_LOCATION,
    });

    // references an existing subscription, (e.g. rbm-agent-sub)
    let subscription = pubsub.subscription(PUB_SUB_SUBSCRIPTION_NAME);

    // create an event handler to handle messages
    let messageHandler = (message) => {
        console.log(`Received message ${message.id}:`);
        console.log(`\tData: ${message.data}`);
        console.log(`\tAttributes: ${message.attributes}`);

        let userEvent = JSON.parse(message.data);

        // TODO: process the userEvent to create another RBM message
        // "Ack" (acknowledge receipt of) the message
        message.ack();
    };

    // Listen for new messages
    subscription.on('message', messageHandler);

    return { messageHandler: messageHandler, subscription: subscription };
}

स्थानीय तौर पर एजेंट की जांच करने के लिए, एक्सप्रेस ऐप्लिकेशन शुरू होने पर आपको initPubsub को कॉल करना होगा. साथ ही, आपको कंसोल में messageHandler प्रिंट करने के जवाब दिखेंगे.

Google के App Engine को कॉन्फ़िगर करना और डिप्लॉय करना

प्रोडक्शन एनवायरमेंट में, आपको यह पक्का करना होगा कि सदस्यता हमेशा उपलब्ध रहे. Pub/Sub मैसेज सुनने वाले को समय-समय पर फिर से शुरू करने के लिए, सबसे आसान तरीका है.

App Engine में, क्रॉन जॉब का इस्तेमाल अलग-अलग अंतराल वाले टास्क शेड्यूल करने के लिए किया जा सकता है. क्रॉन जॉब को जानकारी, यूआरएल, और इंटरवल के साथ कॉन्फ़िगर किया जाता है. Node.js ऐप्लिकेशन में, आप उन्हें cron.yaml फ़ाइल में कॉन्फ़िगर करते हैं. इसे Google Cloud SDK का इस्तेमाल करके, App Engine में डिप्लॉय किया जा सकता है. cron.yaml के साथ नौकरियों को शेड्यूल करने की सुविधा, अन्य भाषा कॉन्फ़िगरेशन सेट अप के बारे में पढ़ सकती है.

क्रॉन टास्क के लिए यूआरएल की ज़रूरत होती है, इसलिए आपको एक्सप्रेस ऐप्लिकेशन राऊटर में यूआरएल एंडपॉइंट जोड़ना होगा, ताकि क्रॉन को कॉल किया जा सके. ऐसा करने पर, सुनने के लिए, पिछले सेक्शन से initPubsub तरीका कॉल किया जाएगा.

router.get('/pubsubCallback', function(req, res, next) {
  let pubsubConfig = initPubsub();

      // Stop listening once the timeout is hit
      setTimeout(() => {
        pubsubConfig.subscription.removeListener('message', pubsubConfig.messageHandler);
      }, CRON_JOB_TIMEOUT * 1000);

  res.status(200).send();
});

कॉलबैक में, आपको शेड्यूल किए गए टास्क को फिर से चलाने से पहले, लिसनर को भी हटाना होगा. उदाहरण के लिए, अगर क्रॉन जॉब हर मिनट में चलता है, तो आप CRON_JOB_TIMEOUT पैरामीटर को 60 के बराबर कॉन्फ़िगर करें.

इस एंडपॉइंट को हर मिनट चलाने के लिए, cron.yaml फ़ाइल कॉन्फ़िगरेशन यहां दिया गया है.

cron:
- description: "Processing Pub/Sub messages"
  url: /pubsubCallback
  schedule: every 1 mins

क्रॉन टास्क को App Engine पर डिप्लॉय करने के लिए, ये काम करें:

gcloud app deploy cron.yaml

डिप्लॉयमेंट के बाद, App Engine अपने-आप क्रॉन टास्क को कॉन्फ़िगर करता है. टास्क को App Engine > क्रॉन जॉब में देखा जा सकता है, जैसा कि यहां दिखाया गया है.

कॉन्फ़िगर किया गया क्रॉन जॉब

रैप-अप और टीएल;डीआर

पुल की सदस्यता का इस्तेमाल करके, लोकल लेवल पर जांच और डीबग किया जा सकता है. इससे डेवलपमेंट साइकल को तेज़ करने और आरबीएम एजेंट बनाने में लगने वाले समय को कम करने में मदद मिलती है. हालांकि, पुल मॉडल को कुछ अतिरिक्त कॉन्फ़िगरेशन और कोड बनाम पुश मॉडल की ज़रूरत होती है, लेकिन सेटअप आसान होता है और इसे सिर्फ़ एक बार कॉन्फ़िगर करने की ज़रूरत होती है. क्रॉन जॉब यह पक्का करने का एक आसान तरीका है कि आपके एजेंट के संदेश फ़्लो को प्रबंधित करने के लिए आपकी पुल सदस्यता हमेशा उपलब्ध रहे, जबकि App Engine सेटअप और रखरखाव को बहुत ही कम खर्च में उपलब्ध कराता है.

शुभकामनाएं और कोडिंग करें!