1. مقدمة
في هذا الدرس التطبيقي، أدرجنا الخطوات اللازمة لنشر حدث على Google Cloud Pub/Sub API باستخدام ABAP SDK لـ Google Cloud.
يتم استخدام خدمات Google Cloud التالية في هذا الدرس العملي:
- نشر/اشتراك
- Cloud Shell
ما ستنشئه
ستتعرّف على ما يلي:
- فعِّل Pub/Sub في مشروع على Google Cloud.
- أنشئ موضوعًا على Pub/Sub.
- نشر الرسائل
2. قبل البدء
- لقد ثبَّت ABAP SDK for Google Cloud على نظامك. يمكنك الرجوع إلى codelab- تثبيت الإصدار التجريبي من ABAP على Google Cloud Platform - لإعداد نظام جديد.
- يمكنك استخدام Cloud Shell، وهي بيئة سطر أوامر تعمل في Google Cloud. من Cloud Console، انقر على تفعيل Cloud Shell في أعلى يسار الصفحة:
- شغِّل الأوامر التالية للمصادقة على حسابك وضبط المشروع التلقائي على
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:
- الناشر (يُعرف أيضًا باسم المنتج): ينشئ الرسائل ويرسلها (ينشرها) إلى خدمة المراسلة حول موضوع محدّد.
- الرسالة: هي البيانات التي يتم نقلها من خلال خدمة المراسلة.
- الموضوع: كيان مسمّى يمثّل خلاصة من الرسائل.
4. إعداد خدمة Pub/Sub
- لإنشاء حساب خدمة بالدور المطلوب، شغِّل الأمر التالي في نافذة Cloud Shell الطرفية:
gcloud iam service-accounts create abap-sdk-pubsub-tester --display-name="Service Account for PubSub"
- لتفعيل Pub/Sub API لحساب الخدمة (
abap-sdk-poc
)، نفِّذ الأمر التالي في نافذة Cloud Shell:
gcloud services enable pubsub.googleapis.com
- امنح حساب الخدمة دور 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'
- امنح حساب الخدمة دور 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'
- للتأكّد من إضافة الأدوار، انتقِل إلى صفحة IAM. يجب أن يظهر حساب الخدمة الذي أنشأته مع الأدوار التي تمّ تعيينها له.
5- ضبط مفتاح العميل
للحفاظ على الإعدادات في جدول /GOOG/CLIENT_KEY
، اتّبِع الخطوات التالية:
- في SAP GUI، أدخِل رمز المعاملة SPRO.
- انقر على SAP Reference IMG.
- انقر على ABAP SDK for Google Cloud > الإعدادات الأساسية > إعداد مفتاح العميل.
- انقر على إدخالات جديدة.
- أدخِل قيمًا للحقول التالية:
الحقل | الوصف |
اسم مفتاح 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 |
اترك الحقول الأخرى فارغة
6. إنشاء موضوع
يمكنك إنشاء موضوع باستخدام الطريقة CREATE_TOPICS الخاصة بملف تعريف واجهة برمجة التطبيقات /GOOG/CL_PUBSUB_V1. توقيع الطريقة:
- في SAP GUI، أدخِل رمز المعاملة SE38.
- أنشئ تقريرًا بالاسم ZPUBSUB_DEMO.
- في النافذة المنبثقة التي تظهر، أدخِل التفاصيل كما هو موضّح أدناه، ثم انقر على حفظ.
- في النافذة المنبثقة التالية، اختَر Local Object (كائن محلي) أو أدخِل اسم حزمة حسب الاقتضاء.
- في "أداة تعديل 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.
- احفظ التقرير وفعِّله.
- نفِّذ التقرير (F8).
عند التنفيذ بنجاح، من المفترض أن تظهر لك نتائج التقرير كما هو موضّح أدناه:
7. نشر رسالة في الموضوع
بعد أن أصبح الموضوع جاهزًا، يمكننا الآن التركيز على إرسال البيانات إليه. في الخطوة التالية، سنتعرّف على كيفية نشر الرسائل حول هذا الموضوع. يتم نشر الرسائل في الموضوع باستخدام الطريقة PUBLISH_TOPICS
من رمز واجهة برمجة التطبيقات /GOOG/CL_PUBSUB_V1
.
توقيع الطريقة:
- في SAP GUI، أدخِل رمز المعاملة SE38.
- أنشئ تقريرًا بالاسم ZPUBSUB_DEMO_PUBLISH.
- في النافذة المنبثقة التي تظهر، أدخِل التفاصيل كما هو موضّح أدناه، ثم انقر على حفظ.
- في النافذة المنبثقة التالية، اختَر Local Object (كائن محلي) أو أدخِل اسم حزمة حسب الاقتضاء.
- في "أداة تعديل 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.
- احفظ التقرير وفعِّله.
- نفِّذ التقرير (F8).
عند التنفيذ بنجاح، من المفترض أن تظهر لك نتائج التقرير كما هو موضّح أدناه:
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
حذف موارد فردية
- احذف الجهاز الظاهري:
gcloud compute instances delete abap-trial-docker
- احذف قواعد جدار الحماية باتّباع الخطوات التالية:
gcloud compute firewall-rules delete sapmachine
- احذف حساب الخدمة:
gcloud iam service-accounts delete \
abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com