পুল সাবস্ক্রিপশনের মাধ্যমে কীভাবে RBM এজেন্ট বিকাশের গতি বাড়ানো যায়

RBM এজেন্টরা Google Cloud Pub/Sub- এর সাথে প্রকাশ/সাবস্ক্রাইব সম্পর্কের মাধ্যমে বার্তা এবং ইভেন্টগুলি গ্রহণ করে। যখন একজন ব্যবহারকারী আপনার এজেন্টের বার্তাগুলির প্রতিক্রিয়া জানায়, তখন RBM প্ল্যাটফর্ম সেই বার্তাগুলিকে একটি অনন্য পাব/সাব বিষয়ে প্রকাশ করে যেটিতে শুধুমাত্র আপনার এজেন্টের অ্যাক্সেস থাকে। আপনার এজেন্ট তার অনন্য বিষয়ের সদস্যতার মাধ্যমে সেই বার্তা এবং ইভেন্টগুলি অ্যাক্সেস করে৷

পাব/সাব দুই ধরনের সাবস্ক্রিপশন সমর্থন করে: পুশ এবং টান । পুশ সাবস্ক্রিপশনের সাথে, ক্লাউড পাব/সাব আপনার কনফিগার করা ওয়েবহুক ইউআরএলে বার্তা পাঠায়। একটি পুল সাবস্ক্রিপশনের সাথে, আপনি একটি দীর্ঘ-চলমান বার্তা শ্রোতা তৈরি করতে এবং বার্তাগুলি গ্রহণ করার সাথে সাথে স্বীকার করার জন্য কোড লেখার জন্য দায়ী৷

বেশিরভাগ ডেভেলপারদের কাছে আরও পরিচিত এবং জনপ্রিয় পদ্ধতি হল পুশ সাবস্ক্রিপশন। আপনি যদি তৃতীয় পক্ষের API ব্যবহার করে থাকেন, তাহলে সম্ভবত আপনি কলব্যাক/ওয়েবহুক URL-এর সাথে কাজ করেছেন। যদিও এই পদ্ধতিটি সহজ, তবে এটির জন্য একটি সর্বজনীনভাবে উপলব্ধ URL প্রয়োজন, যা বিকাশকারীদের প্রতিবার পরিবর্তন পরীক্ষা করতে চাইলে সর্বজনীন ওয়েব সার্ভারে স্থাপন করতে বাধ্য করে।

এই নিবন্ধে, আমি আপনাকে দেখাব কীভাবে স্থানীয় পরীক্ষার জন্য একটি পুল সাবস্ক্রিপশন সেট আপ করতে হয় এবং কীভাবে Google ক্লাউডের অ্যাপ ইঞ্জিনের সাথে একটি উত্পাদন পরিবেশে এই সদস্যতাটি ব্যবহার করতে হয়।

পুল সাবস্ক্রিপশনের জন্য পাব/সাব কনফিগার করা হচ্ছে

আপনি যদি ইতিমধ্যে আপনার এজেন্টের জন্য Pub/Sub কনফিগার না করে থাকেন, তাহলে আপনার প্রাথমিক সদস্যতা তৈরি করতে Cloud Pub/Sub- এর নির্দেশাবলী অনুসরণ করুন।

একবার আপনি আপনার সাবস্ক্রিপশন তৈরি করে ফেললে, একটি পুশ থেকে একটি পুল মডেলে স্যুইচ করা সহজ৷ Google ক্লাউড কনসোলে নেভিগেট করুন, তারপর Pub/Sub > সদস্যতা বিভাগে যান। আপনার এজেন্টের জন্য তৈরি করা সাবস্ক্রিপশনের পাশের ওভারফ্লো মেনুতে ক্লিক করুন এবং সম্পাদনা নির্বাচন করুন। আপনি নীচের ছবির অনুরূপ একটি কনফিগারেশন পর্দা দেখতে হবে.

সদস্যতা বিবরণ

ডেলিভারি টাইপ টানতে সেট করুন এবং সংরক্ষণ করুন ক্লিক করুন।

একটি অ্যাসিঙ্ক্রোনাস পুল সাবস্ক্রিপশন হ্যান্ডলার সেট আপ করা হচ্ছে

এরপর, সাবস্ক্রিপশন থেকে বার্তা পেতে আপনাকে আপনার RBM এজেন্ট আপডেট করতে হবে। অ্যাসিঙ্ক্রোনাস পুলে বিভিন্ন প্রোগ্রামিং ল্যাঙ্গুয়েজ দিয়ে কীভাবে এটি সম্পন্ন করা যায় সে সম্পর্কে আপনি পড়তে পারেন বা RBM এজেন্টের কিছু নমুনা দেখে নিতে পারেন, যার মধ্যে অনেকগুলি একটি পুল মডেল ব্যবহার করে।

নিচের কোডটি প্রদর্শন করে কিভাবে 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 এর অ্যাপ ইঞ্জিনে কনফিগার করা এবং স্থাপন করা হচ্ছে

একটি উত্পাদন পরিবেশে, আপনাকে নিশ্চিত করতে হবে যে সদস্যতা সর্বদা উপলব্ধ। একটি সহজ পদ্ধতি হল পর্যায়ক্রমে পাব/সাব বার্তা শ্রোতাকে পুনরায় চালু করার জন্য ক্রোন কাজের উপর নির্ভর করা।

অ্যাপ ইঞ্জিনে, ক্রন জবগুলি বিভিন্ন ব্যবধানের সাথে কাজের সময় নির্ধারণের জন্য ব্যবহার করা যেতে পারে। একটি ক্রোন কাজ একটি বিবরণ, URL এবং ব্যবধান সহ কনফিগার করা হয়। Node.js অ্যাপে, আপনি এগুলিকে একটি cron.yaml ফাইলে কনফিগার করেন, যা আপনি Google Cloud SDK ব্যবহার করে অ্যাপ ইঞ্জিনে স্থাপন করতে পারেন। আপনি cron.yaml-এর সাথে কাজের সময় নির্ধারণে অন্যান্য ভাষার কনফিগারেশন সেটআপ সম্পর্কে পড়তে পারেন।

যেহেতু ক্রোন টাস্কের জন্য একটি URL প্রয়োজন, তাই আপনাকে ক্রোন দ্বারা কল করার জন্য এক্সপ্রেস অ্যাপ রাউটারে একটি URL এন্ডপয়েন্ট যোগ করতে হবে, যা শ্রোতা শুরু করার জন্য পূর্ববর্তী বিভাগ থেকে 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

অ্যাপ ইঞ্জিনে ক্রোন কাজগুলি স্থাপন করতে, নিম্নলিখিতগুলি চালান:

gcloud app deploy cron.yaml

স্থাপনের পরে, অ্যাপ ইঞ্জিন স্বয়ংক্রিয়ভাবে ক্রোন টাস্ক কনফিগার করে, এবং টাস্কটি অ্যাপ ইঞ্জিন > ক্রোন কাজের অধীনে দেখা যায় যেমনটি নীচে দেখা যায়।

ক্রোন কাজ কনফিগার করা হয়েছে

মোড়ানো এবং TL;DR

একটি পুল সাবস্ক্রিপশন ব্যবহার করা আপনাকে স্থানীয়ভাবে পরীক্ষা এবং ডিবাগ করতে দেয়, যা বিকাশ চক্রকে গতি বাড়াতে এবং RBM এজেন্ট তৈরি করতে সময় কমাতে সাহায্য করে। যদিও পুল মডেলের জন্য কিছু অতিরিক্ত কনফিগারেশন এবং কোড বনাম পুশ মডেলের প্রয়োজন, সেটআপটি সহজ এবং শুধুমাত্র একবার কনফিগার করা প্রয়োজন। ক্রোন জবস হল একটি সহজ উপায় নিশ্চিত করার জন্য যে আপনার পুল সাবস্ক্রিপশন সবসময় আপনার এজেন্টের বার্তা প্রবাহ পরিচালনা করার জন্য উপলব্ধ থাকে এবং অ্যাপ ইঞ্জিন সেটআপ এবং রক্ষণাবেক্ষণকে খুব কম খরচে করে।

শুভকামনা এবং সুখী কোডিং!