1. परिचय
इस कोडलैब में, Google Cloud के लिए ABAP SDK का इस्तेमाल करके, Google Cloud Pub/Sub विषय से इवेंट की जानकारी पाने के बारे में बताया गया है. हम Google Cloud की इन सेवाओं का इस्तेमाल करेंगे:
- Cloud Pub/Sub
- Cloud Shell
ज़रूरी शर्तें
- पक्का करें कि आपके पास SAP सिस्टम का ऐक्सेस हो. साथ ही, उसमें Google Cloud के लिए ABAP SDK इंस्टॉल किया गया हो.
- नया सिस्टम सेट अप करने के लिए, कोडलैब " 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 है, तो इस लिंक पर जाकर, SAP GUI for Java भी इंस्टॉल किया जा सकता है.
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: इससे मैसेज फ़ेच करने का अनुरोध किया जाता है.
- पुष्टि करना: इससे 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 Reference IMG पर क्लिक करें.
- ABAP SDK for Google Cloud > बुनियादी सेटिंग > क्लाइंट कुंजी कॉन्फ़िगर करें पर क्लिक करें.
- फ़ील्ड के लिए यहां दी गई वैल्यू इस्तेमाल करें. बाकी सभी फ़ील्ड खाली छोड़ें.
फ़ील्ड | वैल्यू |
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.
नाम से रिपोर्ट प्रोग्राम बनाएं - खुलने वाले पॉप-अप में, यहां दिखाई गई जानकारी डालें. इसके बाद, सेव करें पर क्लिक करें.
- अगले पॉप-अप में, 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
क्लास का इस्तेमाल करके, 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
एक-एक करके संसाधन मिटाना
- कंप्यूट इंस्टेंस मिटाएं:
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