كيفية تسريع عملية تطوير موظّفي الدعم في RBM من خلال الاشتراك في السحب

يتلقى وكلاء RBM الرسائل والأحداث من خلال علاقة نشر/اشتراك مع Google Cloud Pub/Sub. عندما يردّ المستخدم على رسائل وكيلك، تنشر منصّة "مراسلة الأنشطة التجارية من خلال خدمات الاتصالات التفاعلية (RCS)" هذه الرسائل لموضوع Pub/Sub فريد يمكن للوكيل فقط الوصول إليه. يصل وكيلك إلى هذه الرسائل والأحداث من خلال الاشتراك في موضوعها الفريد.

تتوافق خدمة Pub/Sub مع نوعَين من الاشتراكات: الدفع والسحب. من خلال الاشتراك الفورية، ترسل خدمة Cloud Pub/Sub الرسائل إلى عنوان URL للرد التلقائي على الويب الذي تضبطه. من خلال الاشتراك في السحب، أنت مسؤول عن كتابة الرمز لإنشاء أداة معالجة رسائل طويلة الأمد والتعرّف على الرسائل عند استلامها.

يتّبع معظم مطوّري البرامج النهج الأكثر شيوعًا والأكثر رواجًا. إذا كنت قد استخدمت واجهات برمجة تطبيقات تابعة لجهات خارجية، من المحتمل أن تكون قد استخدمت عناوين URL لمعاودة الاتصال أو الرد التلقائي على الويب. على الرغم من أن هذا الأسلوب بسيط، يتطلب عنوان URL متاحًا للجميع، ما يفرض على مطوّري البرامج النشر على خوادم الويب العلنية في كل مرة يريدون فيها اختبار تغيير.

في هذه المقالة، سأوضّح لك كيفية إعداد اشتراك السحب للاختبار المحلي وكيفية استخدام هذا الاشتراك في بيئة إنتاج باستخدام Google Cloud App Engine.

ضبط نشر/اشتراك اشتراك سحب

إذا لم يسبق لك إعداد خدمة Pub/Sub لوكيلك، اتّبِع التعليمات الواردة في Cloud Pub/Sub لإنشاء اشتراكك الأوليّ.

بعد إنشاء اشتراكك، يمكنك التبديل بسهولة من نموذج الدفع إلى نموذج السحب. انتقِل إلى Google Cloud Console، ثم انتقِل إلى قسم Pub/Sub > الاشتراكات. انقر على القائمة الكاملة بجانب الاشتراك الذي أنشأته لوكيلك، واختَر تعديل. من المفترض أن تظهر لك شاشة ضبط مماثلة للصورة أدناه.

تفاصيل الاشتراك

اضبط نوع التسليم على سحب، ثم انقر على حفظ.

إعداد معالج اشتراك غير متزامن في السحب

بعد ذلك، عليك تعديل الوكيل "مراسلة الأنشطة التجارية من خلال خدمات الاتصالات التفاعلية (RCS)" لسحب الرسائل من الاشتراك. يمكنك التعرّف على كيفية تحقيق ذلك باستخدام لغات برمجة مختلفة من خلال عملية السحب غير المتزامنة أو إلقاء نظرة على بعض عيّنات ميزة "مراسلة الأنشطة التجارية من خلال خدمات الاتصالات التفاعلية (RCS)"، حيث يستخدم العديد منها نموذج سحب.

يوضح الرمز أدناه كيفية إعداد أداة معالجة اشتراك غير متزامنة في 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 عند بدء تشغيل تطبيق Express الخاص بك، وستظهر لك messageHandler ردود الطباعة في وحدة التحكّم.

ضبط ونشر محرك التطبيقات من Google

في بيئة الإنتاج، عليك التأكُّد من توفُّر الاشتراك دائمًا. أحد الأساليب البسيطة هو الاعتماد على مهمة cron لإعادة إعداد أداة معالجة رسائل Pub/Sub بشكل دوري.

في App Engine، يمكن استخدام مهام cron لجدولة المهام باستخدام فواصل مختلفة. يتم ضبط مهمة cron مع وصف وعنوان URL وفاصل زمني. في تطبيقات Node.js، يمكنك ضبط هذه الملفات في ملف cron.yaml الذي يمكنك نشره على App Engine باستخدام Google Cloud SDK. يمكنك التعرُّف على عمليات إعداد اللغات الأخرى في جدولة المهام باستخدام cron.yaml.

بما أنّ مهمة cron بحاجة إلى عنوان URL، عليك إضافة نقطة نهاية عنوان URL إلى جهاز توجيه التطبيق السريع ليتم طلبها بواسطة cron، ما سيؤدي إلى استدعاء طريقة 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 يتم تشغيلها كل دقيقة، يمكنك ضبط المَعلمة CRON_JOB_TIMEOUT لتساوي 60.

في ما يلي إعدادات ملف cron.yaml لتنفيذ نقطة النهاية هذه كل دقيقة.

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

لنشر مهام cron على App Engine، نفِّذ ما يلي:

gcloud app deploy cron.yaml

بعد النشر، يضبط محرك التطبيقات مهمة cron تلقائيًا، وتكون المهمة قابلة للعرض ضمن App Engine > مهام Cron كما هو موضّح أدناه.

مهمة cron تم ضبطها

الخاتمة والنص طويل جدًّا ولم تتم قراءته (TL;DR)

يتيح لك استخدام اشتراك السحب الاختبار وتصحيح الأخطاء على الجهاز، ما يساعد على تسريع دورات التطوير وتقليل الوقت اللازم لإنشاء وكلاء RBM. على الرغم من أنّ نموذج السحب يتطلّب بعض الإعدادات والرموز البرمجية مقارنةً بنموذج الدفع، إلا أنّ عملية الإعداد بسيطة ويجب ضبطها مرة واحدة فقط. وتُعدّ مهام Cron طريقة سهلة للتأكّد من أنّ اشتراكك في السحب متوفّر دائمًا للتعامل مع تدفق رسائل وكيلك، كما أنّ App Engine يجعل عملية الإعداد والصيانة منخفضة التكلفة جدًا.

نتمنى لك حظًا موفقًا ونتمنى لك التوفيق في الترميز.