פרסום אירוע ב-Cloud Pub/Sub באמצעות ABAP SDK ל-Google Cloud

1. מבוא

בקודלאב הזה פירטנו את השלבים לפרסום אירוע ב-Google Cloud Pub/Sub API באמצעות ABAP SDK for Google Cloud.

בקודלאב הזה נעשה שימוש בשירותי Google Cloud הבאים:

  • Pub/Sub
  • 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. מקצים לחשבון השירות את תפקיד ה-IAM pubsub.topics.create כדי שיהיה אפשר ליצור נושא. מריצים את הפקודה הבאה במסוף של 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, מזינים את קוד העסקה SPRO.
  2. לוחצים על SAP Reference IMG.
  3. לוחצים על ABAP SDK for Google Cloud‏ > Basic Settings‏ > Configure Client Key.
  4. לוחצים על New Entries.
  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

Authorization Class

/GOOG/CL_AUTH_GOOGLE

משאירים את שאר השדות ריקים

ec6b6f94bfa85533.png

6. יצירת נושא

יוצרים נושא באמצעות השיטה CREATE_TOPICS של ה-stub של ה-API‏ /GOOG/CL_PUBSUB_V1. החתימה של השיטה:

d40fde108ccf2853.png

  1. בממשק המשתמש של SAP, מזינים את קוד העסקה 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 של סטאב ה-API /GOOG/CL_PUBSUB_V1.

החתימה של השיטה:

459fe21ce68bd811.png

  1. בממשק המשתמש של SAP, מזינים את קוד העסקה 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 API של Google Cloud Platform באמצעות ABAP SDK ל-Google Cloud.

עכשיו אפשר להמשיך ב-codelab הבא כדי להמשיך את תהליך הלמידה של השימוש ב-ABAP SDK כדי לגשת לשירותים שונים של Google Cloud.

  • קבלת אירוע מ-Cloud Pub/Sub
  • העלאת קובץ לקטגוריה של Cloud Storage באמצעות חלוקה למקטעים
  • קריאה ל-Vertex AI test-bison מ-ABAP
  • . . .

9. הסרת המשאבים

אם אתם לא רוצים להמשיך בקודלאבים הנוספים שקשורים ל-ABAP SDK ל-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