1. परिचय
इस कोडलैब में, Google Cloud के लिए ABAP SDK टूल का इस्तेमाल करके, Google Cloud Pub/Sub के किसी विषय से इवेंट की जानकारी पाने का तरीका बताया गया है. हम Google Cloud की इन सेवाओं का इस्तेमाल करेंगे:
- Cloud Pub/Sub
- Cloud Shell
ज़रूरी शर्तें
- पक्का करें कि आपके पास Google Cloud के लिए ABAP SDK टूल के साथ इंस्टॉल किए गए SAP सिस्टम का ऐक्सेस हो.
- नया सिस्टम सेट अप करने के लिए, कोडलैब " Google Cloud Platform पर ABAP Platform का ट्रायल वर्शन इंस्टॉल करना और ABAP SDK इंस्टॉल करना" देखें.
- आपने अपने Google Cloud प्रोजेक्ट में, "ABAP SDK टूल का इस्तेमाल करके, SAP से Pub/Sub पर इवेंट भेजना" कोडलैब के तहत एक विषय
PUBSUB_DEMO_TOPIC
बनाया है. अगर यह फ़ोल्डर नहीं बनाया गया है, तो इसे बनाने के लिए नीचे दिए गए निर्देश का पालन करें:
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. शुरू करने से पहले
- Google Cloud Console में, प्रोजेक्ट चुनने वाले पेज पर, Google Cloud प्रोजेक्ट चुनें या बनाएं (उदाहरण के लिए:
abap-sdk-poc
). - पक्का करें कि आपके Cloud प्रोजेक्ट के लिए बिलिंग की सुविधा चालू हो. किसी प्रोजेक्ट के लिए बिलिंग की सुविधा चालू है या नहीं, यह देखने का तरीका जानें. अगर बिना पैसे चुकाए 90 दिनों के लिए आज़माने वाले खाते का इस्तेमाल किया जा रहा है, तो यह चरण छोड़ दें.
- इसके लिए, आपको Cloud Shell का इस्तेमाल करना होगा. यह Google Cloud में चलने वाला कमांड-लाइन एनवायरमेंट है. Cloud Console में, सबसे ऊपर दाएं कोने में मौजूद Cloud Shell चालू करें पर क्लिक करें:
- अपने खाते की पुष्टि करने और डिफ़ॉल्ट प्रोजेक्ट को
abap-sdk-poc
पर सेट करने के लिए, ये कमांड चलाएं. उदाहरण के लिए, ज़ोनus-west4-b
का इस्तेमाल किया गया है. अगर ज़रूरी हो, तो अपनी पसंद के हिसाब से नीचे दिए गए निर्देशों में प्रोजेक्ट और ज़ोन बदलें.
gcloud auth login
gcloud config set project abap-sdk-poc
gcloud config set compute/zone us-west4-b
- पिछले कोडलैब " Pub/Sub को इवेंट भेजना" के हिस्से के तौर पर, आपने पहले ही pub/sub API को चालू कर लिया होगा, विषय बना लिया होगा, और 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'
ऊपर दिए गए निर्देश में, Google Cloud प्रोजेक्ट के प्लेसहोल्डर के तौर पर abap-sdk-poc
का इस्तेमाल किया गया है. abap-sdk-poc
की जगह अपना प्रोजेक्ट आईडी डालें.
- भूमिका जोड़ी गई है या नहीं, इसकी पुष्टि करने के लिए 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
पुल सदस्यता के लिए मैसेज का फ़्लो
इस इमेज में, सदस्य क्लाइंट और पुल सदस्यता के बीच के वर्कफ़्लो को दिखाया गया है.
- पुल अनुरोध: आपका SAP सिस्टम (सदस्य), Pub/Sub सर्वर से मैसेज का अनुरोध करने के लिए, पुल तरीके का इस्तेमाल करता है.
- पुल रिस्पॉन्स: Pub/Sub सर्वर, शून्य या उससे ज़्यादा मैसेज और सूचना आईडी के साथ जवाब देता है. अगर आपको कोई जवाब नहीं मिलता है या गड़बड़ी का कोई मैसेज मिलता है, तो इसका मतलब यह नहीं है कि आपको कोई मैसेज नहीं मिला है. यह जवाब, इमेज में दिखाए गए PullResponse जैसा है.
- पुष्टि: किसी मैसेज को प्रोसेस करने के बाद, आपका 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
टेबल में कॉन्फ़िगरेशन को बनाए रखने के लिए, यह तरीका अपनाएं:
- SAP GUI में, ट्रांज़ैक्शन कोड SPRO डालें.
- SAP रेफ़रंस IMG पर क्लिक करें.
- Google Cloud के लिए ABAP SDK टूल > बुनियादी सेटिंग > क्लाइंट पासकोड कॉन्फ़िगर करें पर क्लिक करें.
- फ़ील्ड के लिए, नीचे दी गई वैल्यू का इस्तेमाल करें. बाकी सभी फ़ील्ड खाली छोड़ें.
फ़ील्ड | वैल्यू |
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 रिपोर्ट बनाना
- अपने SAP सिस्टम में लॉग इन करें.
- लेन-देन कोड
SE38
पर जाएं औरZDEMO_RECEIVE_CPS_EVENTS.
नाम से रिपोर्ट प्रोग्राम बनाएं - इसके बाद, खुलने वाले पॉप-अप में नीचे दी गई जानकारी दें और सेव करें पर क्लिक करें.
- अगले पॉप-अप में, लोकल ऑब्जेक्ट चुनें या पैकेज का नाम डालें.
- 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
क्लास का इस्तेमाल करके, 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
अलग-अलग संसाधन मिटाना
- कंप्यूट इंस्टेंस मिटाने के लिए:
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