با استفاده از ABAP SDK برای Google Cloud، رویدادی را در Cloud Pub/Sub منتشر کنید

1. مقدمه

در این لبه کد، مراحل انتشار یک رویداد در Google Cloud Pub/Sub API با استفاده از ABAP SDK برای Google Cloud را فهرست کرده‌ایم.

خدمات Google Cloud زیر در این کد لبه استفاده می شود:

  • میخانه / فرعی
  • پوسته ابری

چیزی که خواهی ساخت

موارد زیر را یاد خواهید گرفت:

  • Pub/Sub را در پروژه Google Cloud فعال کنید.
  • یک موضوع Pub/Sub ایجاد کنید.
  • پیام ها را منتشر کنید.

2. قبل از شروع

  • شما ABAP SDK را برای Google Cloud روی سیستم خود نصب کرده اید. برای راه‌اندازی یک سیستم جدید می‌توانید به codelab -Install ABAP Trial در Google Cloud Platform مراجعه کنید.
  • شما از Cloud Shell استفاده می‌کنید، یک محیط خط فرمان که در Google Cloud اجرا می‌شود. از Cloud Console، روی Activate Cloud Shell در گوشه سمت راست بالا کلیک کنید:

6757b2fb50ddcc2d.png

  • دستورات زیر را برای احراز هویت برای حساب خود اجرا کنید و پروژه پیش فرض را روی abap-sdk-poc تنظیم کنید. Zone 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 را به حساب سرویس اختصاص دهید تا بتوانید موضوعی ایجاد کنید. دستور زیر را در ترمینال پوسته ابری اجرا کنید:
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 را به حساب سرویس اعطا کنید تا بتوانید پیامی را برای موضوع منتشر کنید. دستور زیر را در ترمینال پوسته ابری اجرا کنید:
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 برای 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 Scope

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

شناسه پروژه Google Cloud

abap-sdk-poc

کلاس مجوز

/GOOG/CL_AUTH_GOOGLE

فیلدهای دیگر را خالی بگذارید

ec6b6f94bfa85533.png

6. یک موضوع ایجاد کنید

شما با استفاده از روش CREATE_TOPICS از API خرد /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 از API خرد /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. تبریک می گویم

تبریک می گویم! شما با استفاده از ABAP SDK برای Google Cloud پیامی را با موفقیت به API Pub/Sub پلتفرم Google Cloud منتشر کردید.

اکنون می‌توانید برای ادامه مسیر یادگیری خود در استفاده از ABAP SDK برای دسترسی به سرویس‌های مختلف Google Cloud، با کدهای زیر ادامه دهید.

  • رویدادی را از Cloud Pub/Sub دریافت کنید
  • با Chunking یک فایل را در سطل ذخیره سازی ابری آپلود کنید
  • 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