نشر حدث في Cloud Pub/Sub باستخدام ABAP SDK في Google Cloud

1. مقدمة

في هذا الدرس التطبيقي، أدرجنا الخطوات اللازمة لنشر حدث على Google Cloud Pub/Sub API باستخدام ABAP SDK لـ Google Cloud.

يتم استخدام خدمات Google Cloud التالية في هذا الدرس العملي:

  • نشر/اشتراك
  • Cloud Shell

ما ستنشئه

ستتعرّف على ما يلي:

  • فعِّل Pub/Sub في مشروع على Google Cloud.
  • أنشئ موضوعًا على Pub/Sub.
  • نشر الرسائل

2. قبل البدء

6757b2fb50ddcc2d.png

  • شغِّل الأوامر التالية للمصادقة على حسابك وضبط المشروع التلقائي على abap-sdk-poc. يتم استخدام المنطقة us-west4-b كمثال. إذا لزم الأمر، يُرجى تغيير المشروع والمنطقة في الأوامر التالية استنادًا إلى إعداداتك المفضّلة.
gcloud auth login
gcloud config set project abap-sdk-poc
gcloud config set compute/zone us-west4-b

3- نظرة عامة

يشمل نطاق هذا الدرس التطبيقي حول الترميز المكوّنات التالية لخدمة Pub/Sub:

  • الناشر (يُعرف أيضًا باسم المنتج): ينشئ الرسائل ويرسلها (ينشرها) إلى خدمة المراسلة حول موضوع محدّد.
  • الرسالة: هي البيانات التي يتم نقلها من خلال خدمة المراسلة.
  • الموضوع: كيان مسمّى يمثّل خلاصة من الرسائل.

4f5676da8922467f.png

4. إعداد خدمة Pub/Sub

  1. لإنشاء حساب خدمة بالدور المطلوب، شغِّل الأمر التالي في نافذة Cloud Shell الطرفية:
gcloud iam service-accounts create abap-sdk-pubsub-tester --display-name="Service Account for PubSub"
  1. لتفعيل Pub/Sub API لحساب الخدمة (abap-sdk-poc)، نفِّذ الأمر التالي في نافذة Cloud Shell:
gcloud services enable pubsub.googleapis.com
  1. امنح حساب الخدمة دور pubsub.topics.create في "إدارة الهوية وإمكانية الوصول" (IAM) لتتمكّن من إنشاء موضوع. نفِّذ الأمر التالي في وحدة Cloud Shell الطرفية:
gcloud endpoints services add-iam-policy-binding pubsub.googleapis.com \ --member='serviceAccount:abap-sdk-pubusb-tester@abap-sdk-poc.iam.gserviceaccount.com' \
--role='roles/roles/pubsub.topics.create'
  1. امنح حساب الخدمة دور IAM pubsub.topics.publish كي يتمكّن من نشر رسالة في الموضوع. نفِّذ الأمر التالي في وحدة Cloud Shell الطرفية:
gcloud endpoints services add-iam-policy-binding pubsub.googleapis.com \ --member='serviceAccount:abap-sdk-pubusb-tester@abap-sdk-poc.iam.gserviceaccount.com' \
--role='roles/roles/pubsub.topics.publish'
  1. للتأكّد من إضافة الأدوار، انتقِل إلى صفحة IAM. يجب أن يظهر حساب الخدمة الذي أنشأته مع الأدوار التي تمّ تعيينها له.

5- ضبط مفتاح العميل

للحفاظ على الإعدادات في جدول /GOOG/CLIENT_KEY، اتّبِع الخطوات التالية:

  1. في SAP GUI، أدخِل رمز المعاملة SPRO.
  2. انقر على SAP Reference IMG.
  3. انقر على ABAP SDK for Google Cloud > الإعدادات الأساسية > إعداد مفتاح العميل.
  4. انقر على إدخالات جديدة.
  5. أدخِل قيمًا للحقول التالية:

الحقل

الوصف

اسم مفتاح Google Cloud

PUBSUB_DEMO

اسم حساب خدمة Google Cloud

abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com

نطاق Google Cloud

https://www.googleapis.com/auth/cloud-platform

معرّف مشروع Google Cloud

abap-sdk-poc

فئة التفويض

/GOOG/CL_AUTH_GOOGLE

اترك الحقول الأخرى فارغة

ec6b6f94bfa85533.png

6. إنشاء موضوع

يمكنك إنشاء موضوع باستخدام الطريقة CREATE_TOPICS الخاصة بملف تعريف واجهة برمجة التطبيقات /GOOG/CL_PUBSUB_V1. توقيع الطريقة:

d40fde108ccf2853.png

  1. في SAP GUI، أدخِل رمز المعاملة SE38.
  2. أنشئ تقريرًا بالاسم ZPUBSUB_DEMO.
  3. في النافذة المنبثقة التي تظهر، أدخِل التفاصيل كما هو موضّح أدناه، ثم انقر على حفظ.

f9cbdabb6ca96fc4.png

  1. في النافذة المنبثقة التالية، اختَر Local Object (كائن محلي) أو أدخِل اسم حزمة حسب الاقتضاء.
  2. في "أداة تعديل ABAP"، أضِف الرمز التالي:
" Data Declaration
DATA:
  lo_client        TYPE REF TO /goog/cl_pubsub_v1.

TRY.
    " Open HTTP Connection
    CREATE OBJECT lo_client EXPORTING iv_key_name = 'PUBSUB_DEMO'.

    " Populate relevant parameters
    DATA(lv_p_projects_id) = CONV string( lo_client->gv_project_id ).
    DATA(lv_p_topics_id) = CONV string( 'PUBSUB_DEMO_TOPIC' ).

    " Call API method pubsub.topics.create
    lo_client->create_topics(
      EXPORTING
        iv_p_projects_id = lv_p_projects_id
        iv_p_topics_id   = lv_p_topics_id
      IMPORTING
      es_output        = DATA(ls_output)
      ev_ret_code      = DATA(lv_ret_code)
      ev_err_text      = DATA(lv_err_text)
      es_err_resp      = DATA(ls_err_resp) ).

    IF lo_client->is_success( lv_ret_code ) = abap_true.
      DATA(lv_msg) = 'Topic ' && ':' && lv_p_topics_id && ' was created!'.
      MESSAGE lv_msg TYPE 'I' .
    ELSE.
      MESSAGE lv_err_text TYPE 'E'.
    ENDIF.

    " Close HTTP Connection
    lo_client->close( ).

  CATCH /goog/cx_sdk INTO DATA(lo_exception).
    MESSAGE lo_exception->get_text( ) TYPE 'E'.
    RETURN.
ENDTRY.
  1. احفظ التقرير وفعِّله.
  2. نفِّذ التقرير (F8).

عند التنفيذ بنجاح، من المفترض أن تظهر لك نتائج التقرير كما هو موضّح أدناه:

16aa8a4c59d776d9.png

7. نشر رسالة في الموضوع

بعد أن أصبح الموضوع جاهزًا، يمكننا الآن التركيز على إرسال البيانات إليه. في الخطوة التالية، سنتعرّف على كيفية نشر الرسائل حول هذا الموضوع. يتم نشر الرسائل في الموضوع باستخدام الطريقة PUBLISH_TOPICS من رمز واجهة برمجة التطبيقات /GOOG/CL_PUBSUB_V1.

توقيع الطريقة:

459fe21ce68bd811.png

  1. في SAP GUI، أدخِل رمز المعاملة SE38.
  2. أنشئ تقريرًا بالاسم ZPUBSUB_DEMO_PUBLISH.
  3. في النافذة المنبثقة التي تظهر، أدخِل التفاصيل كما هو موضّح أدناه، ثم انقر على حفظ.

9a180c4e9a1e139.png

  1. في النافذة المنبثقة التالية، اختَر Local Object (كائن محلي) أو أدخِل اسم حزمة حسب الاقتضاء.
  2. في "أداة تعديل ABAP"، أضِف الرمز التالي:
" Data Declaration
DATA:
  lo_client        TYPE REF TO /goog/cl_pubsub_v1,
  ls_message       TYPE /goog/cl_pubsub_v1=>ty_025,
  ls_input         TYPE /goog/cl_pubsub_v1=>ty_023.

TRY.
    " Open HTTP Connection
    CREATE OBJECT lo_client EXPORTING iv_key_name = 'PUBSUB_DEMO'.

    " Populate relevant parameters
    DATA(lv_p_projects_id) = CONV string( lo_client->gv_project_id ).
    DATA(lv_p_topics_id) = CONV string( 'PUBSUB_DEMO_TOPIC' ).

    ls_message-data = cl_http_utility=>encode_base64( unencoded = ' This message was published to topic' ).
    APPEND ls_message TO ls_input-messages.

    " Call API method : pubsub.topics.publish
    " This method publishes the message(encoded in base64 format to the topic )
    lo_client->publish_topics(
     EXPORTING
       iv_p_projects_id = lv_p_projects_id
       iv_p_topics_id   = lv_p_topics_id
       is_input         = ls_input
     IMPORTING
       es_output        = DATA(ls_output)
       ev_ret_code      = DATA(lv_ret_code)
       ev_err_text      = DATA(lv_err_text)
       es_err_resp      = DATA(ls_err_resp)  ).

    IF lo_client->is_success( lv_ret_code ) = abap_true.
       DATA(lv_msg) = 'Message was published to topic '  && ': ' &&         lv_p_topics_id.
      MESSAGE lv_msg TYPE 'I' DISPLAY LIKE 'S'.

    ELSE.
      MESSAGE lv_err_text TYPE 'E'.
    ENDIF.

    " Close HTTP Connection
    lo_client->close( ).

  CATCH /goog/cx_sdk INTO DATA(lo_exception).
    MESSAGE lv_err_text TYPE 'E'.
    RETURN.
ENDTRY.
  1. احفظ التقرير وفعِّله.
  2. نفِّذ التقرير (F8).

عند التنفيذ بنجاح، من المفترض أن تظهر لك نتائج التقرير كما هو موضّح أدناه:

384125235efc104.png

8. تهانينا

تهانينا! لقد نشرت رسالة بنجاح إلى واجهة برمجة التطبيقات Pub/Sub في Google Cloud Platform باستخدام حزمة تطوير البرامج (SDK) ABAP لخدمة Google Cloud.

يمكنك الآن المتابعة باستخدام الدرس التطبيقي حول الترميز أدناه لمواصلة رحلتك التعليمية حول استخدام حزمة تطوير البرامج (SDK) للغة ABAP من أجل الوصول إلى خدمات Google Cloud المختلفة.

  • تلقّي حدث من Cloud Pub/Sub
  • تحميل ملف إلى حزمة Cloud Storage باستخدام تقسيم الملفات
  • استدعاء Vertex AI test-bison من ABAP
  • . . .

9- تَنظيم

إذا كنت لا تريد مواصلة استخدام دروس البرمجة الإضافية المتعلّقة بحزمة تطوير البرامج (SDK) للغة ABAP على Google Cloud، يُرجى المتابعة وتنفيذ عملية التنظيف.

حذف المشروع

  • احذف مشروع Google Cloud باتّباع الخطوات التالية:
gcloud projects delete abap-sdk-poc

حذف موارد فردية

  1. احذف الجهاز الظاهري:
gcloud compute instances delete abap-trial-docker
  1. احذف قواعد جدار الحماية باتّباع الخطوات التالية:
gcloud compute firewall-rules delete sapmachine
  1. احذف حساب الخدمة:
gcloud iam service-accounts delete \
    abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com