1. مقدمه
این لبه کد شما را از طریق دریافت جزئیات رویداد از یک موضوع Google Cloud Pub/Sub با استفاده از ABAP SDK برای Google Cloud راهنمایی میکند. ما از خدمات Google Cloud زیر استفاده خواهیم کرد:
- Cloud Pub/Sub
- پوسته ابری
پیش نیازها
- اطمینان حاصل کنید که به سیستم SAP با نصب ABAP SDK برای Google Cloud دسترسی دارید.
- برای راه اندازی یک سیستم جدید می توانید به codelab " Install ABAP Platform Trial on Google Cloud Platform and Install ABAP SDK " مراجعه کنید.
- شما یک موضوع
PUBSUB_DEMO_TOPIC
به عنوان بخشی از Codelab " ارسال رویدادها از SAP به Pub/Sub با استفاده از ABAP SDK " در پروژه Google Cloud خود ایجاد کردهاید. اگر ایجاد نشد، از دستور زیر برای ایجاد همان استفاده کنید:
gcloud pubsub topics create PUBSUB_DEMO_TOPIC
چیزی که خواهی ساخت
شما موارد زیر را ایجاد خواهید کرد:
- یک حساب سرویس با مجوزهای «مشترک» برای تعامل با Pub/Sub API.
- یک برنامه ABAP برای دریافت و تایید پیام ها از موضوع Pub/Sub شما.
2. الزامات
- مرورگرهایی مانند Chrome یا Firefox .
- یک پروژه Google Cloud با فعال کردن صورتحساب یا ایجاد یک حساب آزمایشی رایگان 90 روزه برای Google Cloud Platform.
- SAP GUI (ویندوز یا جاوا) در سیستم شما نصب شده است. اگر SAP GUI قبلاً روی لپتاپ شما نصب شده است، با استفاده از آدرس IP خارجی VM به عنوان IP سرور برنامه، به SAP متصل شوید. اگر در مک هستید، می توانید SAP GUI برای جاوا را نیز در این لینک نصب کنید.
3. قبل از شروع
- در Google Cloud Console ، در صفحه انتخابگر پروژه، یک پروژه Google Cloud را انتخاب یا ایجاد کنید (به عنوان مثال:
abap-sdk-poc
). - مطمئن شوید که صورتحساب برای پروژه Cloud شما فعال است. با نحوه بررسی فعال بودن صورتحساب در پروژه آشنا شوید. اگر از حساب آزمایشی رایگان 90 روزه استفاده می کنید، از این مرحله رد شوید.
- شما از Cloud Shell ، یک محیط خط فرمان در حال اجرا در Google Cloud استفاده خواهید کرد. از Cloud Console، روی Activate Cloud Shell در گوشه سمت راست بالا کلیک کنید:
- دستورات زیر را برای احراز هویت برای حساب خود اجرا کنید و پروژه پیش فرض را روی
abap-sdk-poc
تنظیم کنید. Zoneus-west4-b
به عنوان مثال استفاده می شود. در صورت نیاز، لطفاً پروژه و منطقه را در دستورات زیر بر اساس اولویت خود تغییر دهید.
gcloud auth login
gcloud config set project abap-sdk-poc
gcloud config set compute/zone us-west4-b
- به عنوان بخشی از کد لبه قبلی « ارسال رویداد به Pub/Sub »، باید قبلاً API pub/sub را فعال کرده باشید ، موضوع را ایجاد کرده باشید و پیامهایی را به Pub/Sub منتشر کرده باشید .
4. یک حساب سرویس برای دسترسی Pub/Sub ایجاد کنید
استفاده از یک حساب سرویس با نقش Subscriber
امن ترین راه برای برنامه ABAP شما برای دریافت پیام از Pub/Sub است. این نقش مجوزها را فقط به بازیابی پیام محدود می کند و از آسیب پذیری های امنیتی احتمالی جلوگیری می کند.
حساب سرویس ایجاد کنید
برای ایجاد یک حساب کاربری با نقش مورد نیاز، مراحل زیر را انجام دهید:
- دستور زیر را در ترمینال Cloud Shell اجرا کنید:
gcloud iam service-accounts \
create abap-sdk-pubsub-subscriber \
--display-name="Service Account for Pub/Sub Subscriber"
- اکنون نقش های مورد نیاز را به حساب سرویس ایجاد شده در مرحله بالا اضافه کنید:
gcloud projects add-iam-policy-binding abap-sdk-poc \
--member='serviceAccount:abap-sdk-pubsub-subscriber@abap-sdk-poc.iam.gserviceaccount.com' \
--role='roles/pubsub.subscriber'
دستور بالا از abap-sdk-poc
به عنوان یک مکان نگهدار برای پروژه Google Cloud استفاده می کند. abap-sdk-poc
با شناسه پروژه خود جایگزین کنید.
- برای تأیید، نقش اضافه شده است، به صفحه IAM بروید. حساب سرویسی که ایجاد کردید باید همراه با نقشی که به آن اختصاص داده شده است، فهرست شود.
5. درک اشتراک های کششی
برای اشتراک کششی، سیستم SAP شما به عنوان مشتری مشترک عمل میکند و درخواستهایی را به سرور Pub/Sub برای بازیابی پیامها آغاز میکند. مشتری مشترک از REST Pull API استفاده می کند.
روش های کلیدی API
Google Cloud Pub/Sub API
- pull: درخواستی را برای واکشی پیام ها آغاز می کند.
- تصدیق: به Pub/Sub سیگنال می دهد که یک پیام با موفقیت پردازش شده است.
ABAP SDK برای Google Cloud Equivalents
- /GOOG/CL_PUBSUB_V1 -> PULL_SUBSCRIPTIONS
- /GOOG/CL_PUBSUB_V1 -> ACKNOWLEDGE_SUBSCRIPTIONS
جریان پیام ها برای اشتراک کششی
تصویر زیر گردش کار بین یک مشتری مشترک و یک اشتراک کششی را نشان می دهد.
- درخواست کشش: سیستم SAP شما (مشترک) از روش کشش برای درخواست پیام از سرور Pub/Sub استفاده می کند.
- Pull Response : سرور Pub/Sub با پیامهای صفر یا بیشتر و شناسههای تایید پاسخ میدهد. پاسخ با پیام صفر یا با خطا لزوماً نشان دهنده این نیست که هیچ پیامی برای دریافت وجود ندارد. این پاسخ همان PullResponse است که در تصویر نشان داده شده است.
- Acknowledgement: پس از پردازش یک پیام، سیستم SAP شما از روش تایید همراه با شناسه تایید دریافتی استفاده می کند. این از Pub/Sub از ارسال مجدد پیام جلوگیری می کند.
6. راه اندازی اشتراک و ارسال پیام
یک اشتراک کششی ایجاد کنید
- این دستور gcloud را اجرا کنید تا یک اشتراک کششی به نام
PUBSUB_DEMO_SUBSCRIPTION
ایجاد کنید که پیام هایی را ازPUBSUB_DEMO_TOPIC
دریافت می کند:
gcloud pubsub subscriptions create PUBSUB_DEMO_SUBSCRIPTION \
--topic=PUBSUB_DEMO_TOPIC
انتشار پیام ها
یکی از این روش ها را برای ارسال پیام به PUBSUB_DEMO_TOPIC
انتخاب کنید:
- از برنامه خود استفاده مجدد کنید: اگر برنامه را از یک کد آزمایشگاه قبلی برای انتشار دارید، از آن استفاده کنید.
- انتشار مستقیم : برای آزمایش سریع، یکی از گزینه های زیر را امتحان کنید:
- Cloud Console: مستقیماً در Google Cloud Console منتشر کنید. برای جزئیات بیشتر، به مستندات Pub/Sub مراجعه کنید.
- دستور gcloud: دستور زیر را اجرا کنید:
gcloud pubsub topics publish PUBSUB_DEMO_TOPIC \
--message='{"eventType":"SalesOrderChanged","source":"SAPDEV100","eventTime":"20240207183048","SalesOrder":1000924}'
7. پیکربندی کلید مشتری را ایجاد کنید
اکنون که پیش نیازها را در سمت Google Cloud تنظیم کردهاید، میتوانیم با پیکربندی در سمت SAP پیش برویم.
برای احراز هویت و پیکربندی مرتبط با اتصال، ABAP SDK برای Google Cloud از جداول /GOOG/CLIENT_KEY
و /GOOG/SERVIC_MAP.
برای حفظ پیکربندی در جدول /GOOG/CLIENT_KEY
جدول، مراحل زیر را انجام دهید:
- در SAP GUI، کد تراکنش SPRO را وارد کنید.
- روی SAP Reference IMG کلیک کنید.
- روی ABAP SDK برای Google Cloud > Basic Settings > Configure Client Key کلیک کنید.
- مقادیر زیر را در برابر فیلدها حفظ کنید. تمام فیلدهای دیگر را خالی بگذارید.
میدان | ارزش |
نام کلید Google Cloud | PUBSUB_SUBSCRIBER |
نام حساب سرویس Google Cloud | abap-sdk-pubsub-subscriber@abap-sdk-poc.iam.gserviceaccount.com |
Google Cloud Scope | https://www.googleapis.com/auth/cloud-platform |
شناسه پروژه | abap-sdk-poc |
کلاس مجوز | /GOOG/CL_AUTH_GOOGLE |
8. یک گزارش ABAP برای دریافت پیامها از Google Cloud Pub/Sub بسازید
- وارد سیستم SAP خود شوید.
- به کد تراکنش
SE38
بروید و یک گزارش برنامه با نامZDEMO_RECEIVE_CPS_EVENTS.
- در پاپ آپی که باز می شود، جزئیات را مانند شکل زیر ارائه کنید و روی ذخیره کلیک کنید.
- در پاپ آپ بعدی، یا Local Object را انتخاب کنید یا یک نام بسته را در صورت لزوم وارد کنید.
- در ویرایشگر ABAP کد زیر را اضافه کنید:
REPORT zdemo_receive_cps_events. TYPES: BEGIN OF ty_event_message, event_time TYPE timestamp, event_type TYPE char30, source TYPE char30, sales_order TYPE vbeln, END OF ty_event_message. DATA: ls_input TYPE /goog/cl_pubsub_v1=>ty_026, ls_input_ack TYPE /goog/cl_pubsub_v1=>ty_001, ls_event_msg TYPE ty_event_message. TRY. "Open HTTP Connection DATA(lo_client) = NEW /goog/cl_pubsub_v1( iv_key_name = 'PUBSUB_SUBSCRIBER' ). "Populate relevant parameters " Derive project id from the client object DATA(lv_p_projects_id) = CONV string( lo_client->gv_project_id ). " Name of the subscription from where we want to pull data DATA(lv_p_subscriptions_id) = CONV string( 'PUBSUB_DEMO_SUBSCRIPTION' ). " Max number of messages that will be received in 1 API call ls_input-max_messages = 1. "Call API method: pubsub.projects.subscriptions.pull lo_client->pull_subscriptions( EXPORTING iv_p_projects_id = lv_p_projects_id iv_p_subscriptions_id = lv_p_subscriptions_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 ). DATA(ls_received_msg) = VALUE #( ls_output-received_messages[ 1 ] OPTIONAL ). IF ls_received_msg IS NOT INITIAL. "Messages published to Pub/Sub should be base-64 encoded, hence in order to get the exact message, we need to decode the data field. "However, attributes published to Pub/Sub should be accessible as data references. DATA(lv_msg) = |{ cl_http_utility=>decode_base64( encoded = ls_received_msg-message-data ) }|. /ui2/cl_json=>deserialize( EXPORTING json = lv_msg pretty_name = /ui2/cl_json=>pretty_mode-extended CHANGING data = ls_event_msg ). cl_demo_output=>new( )->begin_section( |Receive Events from Cloud Pubsub using ABAP SDK for Google Cloud| )->write_text( |The below event was successfully received with message ID { ls_received_msg-message-MESSAGE_ID }| )->write_data( ls_event_msg )->end_section( )->display( ). ls_input_ack-ack_ids = VALUE #( ( ls_received_msg-ack_id ) ). "Call API method: pubsub.projects.subscriptions.acknowledge "Acknowledge the messages so it is not pulled again. lo_client->acknowledge_subscriptions( EXPORTING iv_p_projects_id = lv_p_projects_id iv_p_subscriptions_id = lv_p_subscriptions_id is_input = ls_input_ack IMPORTING es_output = DATA(ls_output_ack) ev_ret_code = lv_ret_code ev_err_text = lv_err_text es_err_resp = ls_err_resp ). IF lo_client->is_success( lv_ret_code ). MESSAGE lv_msg TYPE 'S'. ELSE. MESSAGE lv_err_text TYPE 'E'. ENDIF. ELSE. MESSAGE 'No Messages were received!' TYPE 'S'. ENDIF. 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'. ENDTRY.
- گزارش را ذخیره و فعال کنید.
- گزارش را اجرا کنید (F8).
در اجرای موفقیت آمیز باید خروجی گزارش را مطابق شکل زیر مشاهده کنید:
9. کد مشترک ABAP Pub/Sub توضیح داده شده است
در اصل، این برنامه ABAP با Google Cloud Pub/Sub به عنوان مشترک پیام ادغام می شود. یک اشتراک مشخص شده را برای پیامهای جدید در صورت تقاضا بررسی میکند، آنها را پردازش میکند و سپس دریافت آنها را تأیید میکند تا از تحویل مجدد در آینده جلوگیری کند.
این برنامه فعالیت های زیر را انجام خواهد داد:
تجزیه گام به گام
برقراری ارتباط:
- با استفاده از کلاس
/GOOG/CL_PUBSUB_V1
یک اتصال HTTP به سرویس Google Cloud Pub/Sub برقرار می کند.
تنظیم پارامترها:
- شناسه پروژه : شناسه پروژه مربوطه را که اشتراک Pub/Sub در آن قرار دارد استخراج می کند.
- نام اشتراک: نام اشتراکی را مشخص میکند که از آن پیامها گرفته میشود (
PUBSUB_DEMO_SUBSCRIPTION
). - محدودیت پیام : حداکثر تعداد پیامها را برای بازیابی در یک تماس API تنظیم میکند (در این مورد، 1).
واکشی پیام ها:
- روش
pull_subscriptions
را برای بازیابی پیام ها از اشتراک مشخص شده فراخوانی می کند.
فرآیند پیام های دریافتی:
- اگر پیامهایی وجود داشته باشد، برنامه دادهها را رمزگشایی میکند، محتوا را ثبت میکند و یک تأییدیه ارسال میکند.
تایید پیام ها:
- متد
acknowledge_subscriptions
را فراخوانی میکند تا یک تأییدیه به Pub/Sub ارسال کند که نشاندهنده دریافت موفقیتآمیز پیامها است. این از تحویل مجدد آنها جلوگیری می کند.
مدیریت موفقیت / خطاها:
- پیام های موفقیت آمیز را در صورت دریافت و تایید پیام ها ارائه می دهد و پیام های خطا را برای سناریوهای مختلف خرابی (بدون دریافت پیام، خطاهای API و غیره) نمایش می دهد.
بستن اتصال:
- اتصال HTTP به سرویس Pub/Sub را میبندد.
10. تبریک می گویم
کار بسیار عالی برای تکمیل Codelab "دریافت یک رویداد از Cloud Pub/Sub با استفاده از ABAP SDK for Google Cloud"!
شما با موفقیت پلی بین ABAP و Google Cloud Pub/Sub ایجاد کردید! تکمیل آزمایشگاه کد شما درک کاملی از پیامهای رویداد محور و نحوه استفاده از ABAP SDK برای Google Cloud برای ادغام با سرویسهای Google Cloud را نشان میدهد. آفرین!
سطح جدیدی از ادغام بین ABAP و Google Cloud Services را باز کرده اید. افق های خود را با این گزینه های هیجان انگیز گسترش دهید:
- استفاده از Translation API با ABAP SDK برای Google Cloud
- یک شی بزرگ را با استفاده از تکه کردن در یک سطل فضای ذخیره سازی ابری آپلود کنید
- بازیابی اعتبارنامه/اسرار از Secret Manager با ABAP SDK برای Google Cloud
- Vertex AI test-bison را از ABAP فراخوانی کنید
- با BigQuery ML از ABAP تماس بگیرید
11. پاکسازی کنید
اگر نمیخواهید با کدهای اضافی مرتبط با ABAP SDK برای 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-pubsub-subscriber@abap-sdk-poc.iam.gserviceaccount.com