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

1. مقدمة

في هذا الدليل التعليمي حول رموز البرامج، لقد أدرجنا خطوات نشر حدث إلى Google Cloud Pub/Sub API باستخدام حزمة تطوير البرامج (SDK) لـ ABAP في 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 لحساب الخدمة حتى تتمكّن من إنشاء موضوع. شغِّل الأمر التالي في وحدة طرفية 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. امنح دور إدارة الهوية وإمكانية الوصول pubsub.topics.publish لحساب الخدمة حتى تتمكّن من نشر رسالة في الموضوع. شغِّل الأمر التالي في وحدة طرفية 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، أدخِل رمز المعاملة 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، أدخِل رمز المعاملة SE38.
  2. أنشئ تقريرًا باسم ZPUBSUB_DEMO.
  3. في النافذة المنبثقة التي تظهر، أدخِل التفاصيل كما هو موضّح أدناه، ثم انقر على حفظ.

f9cbdabb6ca96fc4.png

  1. في النافذة المنبثقة التالية، اختَر كائن محلي أو أدخِل اسم حزمة حسب الاقتضاء.
  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، أدخِل رمز المعاملة SE38.
  2. أنشئ تقريرًا باسم ZPUBSUB_DEMO_PUBLISH.
  3. في النافذة المنبثقة التي تظهر، أدخِل التفاصيل كما هو موضّح أدناه، ثم انقر على حفظ.

9a180c4e9a1e139.png

  1. في النافذة المنبثقة التالية، اختَر كائن محلي أو أدخِل اسم حزمة حسب الاقتضاء.
  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 API في Google Cloud Platform باستخدام حزمة ABAP SDK لـ 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