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 है, तो इस लिंक पर जाकर, Java के लिए SAP GUI भी इंस्टॉल किया जा सकता है.

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: मैसेज फ़ेच करने का अनुरोध शुरू करता है.
  • acknowledge: 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 रेफ़रंस IMG पर क्लिक करें.
  3. Google Cloud के लिए ABAP SDK टूल > बुनियादी सेटिंग > क्लाइंट पासकोड कॉन्फ़िगर करें पर क्लिक करें.

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. अगले पॉप-अप में, लोकल ऑब्जेक्ट चुनें या पैकेज का नाम डालें.
  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) खींचे जाने हैं.
  • मैसेज की सीमा: इससे यह तय होता है कि एक बार में ज़्यादा से ज़्यादा कितने मैसेज वापस लाए जाएं. इस मामले में, एक मैसेज.

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

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

पाए गए मैसेज प्रोसेस करना:

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

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

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

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

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

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

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

10. बधाई हो

"Google Cloud के लिए ABAP SDK टूल का इस्तेमाल करके, 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 की बकेट में अपलोड करना
  • Google Cloud के लिए ABAP SDK की मदद से, 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