Google Cloud के लिए ABAP SDK टूल का इस्तेमाल करके, SAP में Cloud Pub/Sub से इवेंट पाएं

1. परिचय

इस कोडलैब में, Google Cloud के लिए ABAP SDK का इस्तेमाल करके, Google Cloud Pub/Sub विषय से इवेंट की जानकारी पाने के बारे में बताया गया है. हम Google Cloud की इन सेवाओं का इस्तेमाल करेंगे:

  • Cloud Pub/Sub
  • Cloud Shell

ज़रूरी शर्तें

gcloud pubsub topics create PUBSUB_DEMO_TOPIC

आपको क्या बनाना है

आपको ये चीज़ें बनानी होंगी:

  • Pub/Sub API के साथ इंटरैक्ट करने के लिए, ‘सदस्य' की अनुमतियों वाला सेवा खाता.
  • आपके Pub/Sub विषय से मैसेज पाने और उनकी पुष्टि करने के लिए, ABAP प्रोग्राम.

2. ज़रूरी शर्तें

  • ब्राउज़र, जैसे कि Chrome या Firefox.
  • बिलिंग की सुविधा वाला Google Cloud प्रोजेक्ट या Google Cloud Platform के लिए, 90 दिनों के लिए बिना किसी शुल्क के आज़माने वाला खाता बनाएं.
  • आपके सिस्टम में SAP GUI (Windows या Java) इंस्टॉल हो. अगर आपके लैपटॉप पर SAP GUI पहले से इंस्टॉल है, तो वीएम के बाहरी आईपी पते को ऐप्लिकेशन सर्वर आईपी के तौर पर इस्तेमाल करके, SAP से कनेक्ट करें. अगर आपके पास Mac है, तो इस लिंक पर जाकर, SAP GUI for Java भी इंस्टॉल किया जा सकता है.

3. शुरू करने से पहले

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

4. Pub/Sub ऐक्सेस करने के लिए सेवा खाता बनाना

Subscriber भूमिका वाले सेवा खाते का इस्तेमाल करना, आपके ABAP प्रोग्राम के लिए Pub/Sub से मैसेज पाने का सबसे सुरक्षित तरीका है. इस भूमिका से, सिर्फ़ मैसेज वापस पाने की अनुमतियां मिलती हैं. इससे सुरक्षा से जुड़े संभावित जोखिमों को रोका जा सकता है.

सेवा खाता बनाना

ज़रूरी भूमिका वाला सेवा खाता बनाने के लिए, यह तरीका अपनाएं:

  1. Cloud Shell टर्मिनल में यह कमांड चलाएं:
gcloud iam service-accounts \
create abap-sdk-pubsub-subscriber \
--display-name="Service Account for Pub/Sub Subscriber"
  1. अब ऊपर दिए गए चरण में बनाए गए सेवा खाते में ज़रूरी भूमिकाएं जोड़ें:
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'

ऊपर दिए गए निर्देश में, Google Cloud प्रोजेक्ट के लिए प्लेसहोल्डर के तौर पर abap-sdk-poc का इस्तेमाल किया गया है. abap-sdk-poc की जगह अपना प्रोजेक्ट आईडी डालें.

  1. भूमिका जोड़े जाने की पुष्टि करने के लिए, IAM पेज पर जाएं. आपने जो सेवा खाता बनाया है वह असाइन की गई भूमिका के साथ दिखना चाहिए.

5. पुल सदस्यताएं समझने के बारे में जानकारी

पुल टाइप वाली सदस्यता के लिए, आपका SAP सिस्टम, सदस्य क्लाइंट के तौर पर काम करता है. साथ ही, मैसेज पाने के लिए Pub/Sub सर्वर से अनुरोध करता है. सदस्यता लेने वाला क्लाइंट, REST Pull API का इस्तेमाल करता है.

एपीआई के मुख्य तरीके

Google Cloud Pub/Sub API

  • pull: इससे मैसेज फ़ेच करने का अनुरोध किया जाता है.
  • पुष्टि करना: इससे Pub/Sub को यह सूचना मिलती है कि मैसेज को प्रोसेस कर लिया गया है.

Google Cloud के बराबर की सुविधाओं के लिए ABAP SDK

  • /GOOG/CL_PUBSUB_V1 -> PULL_SUBSCRIPTIONS
  • /GOOG/CL_PUBSUB_V1 -> ACKNOWLEDGE_SUBSCRIPTIONS

पुल सदस्यता के लिए मैसेज का फ़्लो

इस इमेज में, सदस्य के क्लाइंट और पुल सदस्यता के बीच का वर्कफ़्लो दिखाया गया है.

f0fc44265192f348.png

  1. पुल अनुरोध: आपका SAP सिस्टम (सदस्यता लेने वाला) Pub/Sub सर्वर से मैसेज का अनुरोध करने के लिए, पुल करने के तरीके का इस्तेमाल करता है.
  2. पुल रिस्पॉन्स: Pub/Sub सर्वर, शून्य या उससे ज़्यादा मैसेज और पुष्टि करने वाले आईडी के साथ जवाब देता है. अगर जवाब में कोई मैसेज नहीं है या कोई गड़बड़ी है, तो इसका मतलब यह नहीं है कि कोई मैसेज नहीं मिला है. यह जवाब, इमेज में दिखाए गए PullResponse के तौर पर है.
  3. पुष्टि करना: किसी मैसेज को प्रोसेस करने के बाद, आपका SAP सिस्टम पुष्टि करने के तरीके का इस्तेमाल करता है. इसके साथ ही, उसे पुष्टि करने वाला आईडी भी मिलता है. इससे Pub/Sub, मैसेज को फिर से डिलीवर नहीं करता.

6. सदस्यता सेट अप करना और मैसेज भेजना

पुल सदस्यता बनाना

  • PUBSUB_DEMO_SUBSCRIPTION नाम की पुल सदस्यता बनाने के लिए, इस gcloud कमांड को एक्ज़ीक्यूट करें. यह सदस्यता, 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 पर कॉन्फ़िगरेशन सेट अप कर सकते हैं.

पुष्टि करने और कनेक्टिविटी से जुड़े कॉन्फ़िगरेशन के लिए, Google Cloud के लिए ABAP SDK, /GOOG/CLIENT_KEY और /GOOG/SERVIC_MAP. टेबल का इस्तेमाल करता है

टेबल /GOOG/CLIENT_KEY टेबल में कॉन्फ़िगरेशन बनाए रखने के लिए, यह तरीका अपनाएं:

  1. SAP GUI में, ट्रांज़ैक्शन कोड SPRO डालें.
  2. SAP Reference IMG पर क्लिक करें.
  3. ABAP SDK for Google Cloud > बुनियादी सेटिंग > क्लाइंट कुंजी कॉन्फ़िगर करें पर क्लिक करें.

25871e639293b9ee.png

  1. फ़ील्ड के लिए यहां दी गई वैल्यू इस्तेमाल करें. बाकी सभी फ़ील्ड खाली छोड़ें.

फ़ील्ड

वैल्यू

Google Cloud की का नाम

PUBSUB_SUBSCRIBER

Google Cloud सेवा खाते का नाम

abap-sdk-pubsub-subscriber@abap-sdk-poc.iam.gserviceaccount.com

Google Cloud का स्कोप

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

प्रोजेक्ट आईडी

abap-sdk-poc

अनुमति देने वाली क्लास

/GOOG/CL_AUTH_GOOGLE

8. Google Cloud Pub/Sub से मैसेज पाने के लिए, ABAP रिपोर्ट बनाना

  1. अपने SAP सिस्टम में लॉग इन करें.
  2. लेन-देन के कोड SE38 पर जाएं और ZDEMO_RECEIVE_CPS_EVENTS. नाम से रिपोर्ट प्रोग्राम बनाएं
  3. खुलने वाले पॉप-अप में, यहां दिखाई गई जानकारी डालें. इसके बाद, सेव करें पर क्लिक करें.

7c739236bedb5bf1.png

  1. अगले पॉप-अप में, Local Object चुनें या पैकेज का नाम डालें.
  2. 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.
  1. रिपोर्ट को सेव करें और चालू करें.
  2. रिपोर्ट चलाएं (F8).

सही तरीके से लागू करने पर, आपको रिपोर्ट का आउटपुट इस तरह दिखेगा:

5b76e886ef79d0ba.png

9. ABAP Pub/Sub सदस्यता के कोड के बारे में जानकारी

असल में, यह ABAP प्रोग्राम, Google Cloud Pub/Sub के साथ मैसेज पाने वाले व्यक्ति के तौर पर इंटिग्रेट होता है. यह तय की गई सदस्यता के लिए, मांग पर नए मैसेज की जांच करता है. इसके बाद, उन्हें प्रोसेस करता है. फिर, उनकी डिलीवरी की पुष्टि करता है, ताकि उन्हें दोबारा डिलीवर होने से रोका जा सके.

प्रोग्राम में ये गतिविधियां होंगी:

चरण-दर-चरण जानकारी

कनेक्शन सेट अप करना:

  • यह /GOOG/CL_PUBSUB_V1 क्लास का इस्तेमाल करके, Google Cloud Pub/Sub सेवा से एचटीटीपी कनेक्शन बनाता है.

पैरामीटर सेट करें:

  • प्रोजेक्ट आईडी: यह उस प्रोजेक्ट आईडी को निकालता है जिसमें Pub/Sub सदस्यता मौजूद है.
  • सदस्यता का नाम: इससे उस सदस्यता का नाम पता चलता है जिससे मैसेज पाने हैं (PUBSUB_DEMO_SUBSCRIPTION).
  • मैसेज की सीमा: इससे, एक एपीआई कॉल में वापस पाए जाने वाले मैसेज की ज़्यादा से ज़्यादा संख्या सेट की जाती है. इस मामले में, यह संख्या 1 है.

मैसेज फ़ेच करना:

  • यह pull_subscriptions तरीके को कॉल करता है, ताकि तय की गई सदस्यता से मैसेज वापस पाए जा सकें.

मिले हुए मैसेज प्रोसेस करना:

  • अगर मैसेज मौजूद हैं, तो प्रोग्राम डेटा को डिकोड करता है, कॉन्टेंट को लॉग करता है, और पुष्टि करने वाला मैसेज भेजता है.

मैसेज की पुष्टि करना:

  • यह acknowledge_subscriptions तरीके को कॉल करता है, ताकि Pub/Sub को यह सूचना भेजी जा सके कि मैसेज मिल गए हैं. इससे उन्हें फिर से डिलीवर नहीं किया जा सकेगा.

सफलता/गड़बड़ियों को मैनेज करना:

  • अगर मैसेज मिल जाते हैं और उनकी पुष्टि हो जाती है, तो यह कुकी सफलता के मैसेज दिखाती है. साथ ही, अगर मैसेज नहीं मिलते हैं, एपीआई से जुड़ी गड़बड़ियां होती हैं, तो यह कुकी गड़बड़ी के मैसेज दिखाती है.

कनेक्शन बंद करें:

  • Pub/Sub सेवा से एचटीटीपी कनेक्शन बंद करता है.

10. बधाई हो

"ABAP SDK for Google Cloud का इस्तेमाल करके, Cloud Pub/Sub से इवेंट पाना" कोडलैब पूरा करने के लिए, आपका धन्यवाद!

आपने ABAP और Google Cloud Pub/Sub के बीच ब्रिज बना लिया है! आपके कोडलैब से पता चलता है कि आपको इवेंट-ड्रिवन मैसेजिंग के बारे में अच्छी जानकारी है. साथ ही, आपको यह भी पता है कि Google Cloud सेवाओं के साथ इंटिग्रेट करने के लिए, Google Cloud के ABAP SDK टूल का इस्तेमाल कैसे किया जाता है. बहुत खूब!

आपने ABAP और Google Cloud Services के बीच इंटिग्रेशन का नया लेवल अनलॉक किया है. इन बेहतरीन विकल्पों की मदद से, अपने काम का दायरा बढ़ाएं:

  • Google Cloud के लिए ABAP SDK के साथ Translation API का इस्तेमाल करना
  • चंकिंग का इस्तेमाल करके, किसी Cloud Storage बकेट में बड़ा ऑब्जेक्ट अपलोड करना
  • ABAP SDK for Google Cloud की मदद से, Secret Manager से क्रेडेंशियल/सीक्रेट वापस पाना
  • ABAP से Vertex AI test-bison को कॉल करना
  • ABAP से BigQuery ML को कॉल करना

11. व्यवस्थित करें

अगर आपको Google Cloud के लिए ABAP SDK से जुड़े अन्य कोडलैब का इस्तेमाल नहीं करना है, तो कृपया क्लीनअप की प्रोसेस पूरी करें.

प्रोजेक्ट मिटाना

  • 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-pubsub-subscriber@abap-sdk-poc.iam.gserviceaccount.com