Google ক্লাউডের জন্য ABAP SDK ব্যবহার করে SAP-এ Cloud Pub/Sub থেকে একটি ইভেন্ট পান

1. ভূমিকা

এই কোডল্যাবটি Google ক্লাউডের জন্য ABAP SDK ব্যবহার করে একটি Google ক্লাউড পাব/সাব বিষয় থেকে ইভেন্টের বিশদ বিবরণ পাওয়ার মাধ্যমে আপনাকে গাইড করে। আমরা নিম্নলিখিত Google ক্লাউড পরিষেবাগুলি ব্যবহার করব:

  • ক্লাউড পাব/সাব
  • মেঘের শেল

পূর্বশর্ত

gcloud pubsub topics create PUBSUB_DEMO_TOPIC

আপনি কি নির্মাণ করবেন

আপনি নিম্নলিখিত তৈরি করবেন:

  • Pub/Sub API-এর সাথে ইন্টারঅ্যাক্ট করার জন্য 'সাবস্ক্রাইবার' অনুমতি সহ একটি পরিষেবা অ্যাকাউন্ট।
  • আপনার পাব/সাব বিষয় থেকে বার্তা গ্রহণ এবং স্বীকার করার জন্য একটি ABAP প্রোগ্রাম।

2. প্রয়োজনীয়তা

  • ব্রাউজার, যেমন ক্রোম বা ফায়ারফক্স
  • বিলিং সক্ষম সহ একটি Google ক্লাউড প্রকল্প বা Google ক্লাউড প্ল্যাটফর্মের জন্য একটি 90-দিনের বিনামূল্যে ট্রায়াল অ্যাকাউন্ট তৈরি করুন
  • আপনার সিস্টেমে ইনস্টল করা SAP GUI (উইন্ডোজ বা জাভা)। যদি আপনার ল্যাপটপে SAP GUI ইতিমধ্যেই ইনস্টল করা থাকে, তাহলে অ্যাপ্লিকেশন সার্ভার IP হিসাবে VM বাহ্যিক IP ঠিকানা ব্যবহার করে SAP-এর সাথে সংযোগ করুন। আপনি যদি ম্যাকে থাকেন, তাহলে আপনি এই লিঙ্কে উপলব্ধ জাভার জন্য SAP GUI ইনস্টল করতে পারেন।

3. আপনি শুরু করার আগে

6757b2fb50ddcc2d.png

  • আপনার অ্যাকাউন্টের জন্য প্রমাণীকরণ করতে নিম্নলিখিত কমান্ডগুলি চালান এবং ডিফল্ট প্রকল্পটিকে abap-sdk-poc এ সেট করুন। Zone us-west4-b উদাহরণ হিসেবে ব্যবহার করা হয়েছে। যদি প্রয়োজন হয়, অনুগ্রহ করে আপনার পছন্দের উপর ভিত্তি করে নিম্নলিখিত কমান্ডগুলিতে প্রকল্প এবং অঞ্চল পরিবর্তন করুন।
gcloud auth login
gcloud config set project abap-sdk-poc
gcloud config set compute/zone us-west4-b

4. পাব/সাব অ্যাক্সেসের জন্য একটি পরিষেবা অ্যাকাউন্ট তৈরি করুন৷

Subscriber ভূমিকা সহ একটি পরিষেবা অ্যাকাউন্ট ব্যবহার করা হল আপনার ABAP প্রোগ্রামের Pub/Sub থেকে বার্তা পাওয়ার সবচেয়ে নিরাপদ উপায়। এই ভূমিকা শুধুমাত্র বার্তা পুনরুদ্ধারের অনুমতি সীমিত করে, সম্ভাব্য নিরাপত্তা দুর্বলতা প্রতিরোধ করে।

পরিষেবা অ্যাকাউন্ট তৈরি করুন

প্রয়োজনীয় ভূমিকা সহ একটি পরিষেবা অ্যাকাউন্ট তৈরি করতে, নিম্নলিখিত পদক্ষেপগুলি সম্পাদন করুন:

  1. ক্লাউড শেল টার্মিনালে নিম্নলিখিত কমান্ডটি চালান:
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 ক্লাউড প্রকল্পের জন্য একটি স্থানধারক হিসাবে abap-sdk-poc ব্যবহার করে। abap-sdk-poc আপনার প্রজেক্ট আইডি দিয়ে প্রতিস্থাপন করুন।

  1. যাচাই করতে, ভূমিকা যোগ করা হয়েছে, IAM পৃষ্ঠায় যান। আপনি যে পরিষেবা অ্যাকাউন্টটি তৈরি করেছেন সেটিকে নির্ধারিত ভূমিকা সহ তালিকাভুক্ত করা উচিত।

5. টান সাবস্ক্রিপশন বোঝা

পুল সাবস্ক্রিপশনের জন্য, আপনার SAP সিস্টেম গ্রাহক ক্লায়েন্ট হিসাবে কাজ করে এবং বার্তাগুলি পুনরুদ্ধার করার জন্য একটি পাব/সাব সার্ভারের কাছে অনুরোধ শুরু করে। গ্রাহক ক্লায়েন্ট REST Pull API ব্যবহার করে।

কী API পদ্ধতি

Google Cloud Pub/Sub API

  • pull: বার্তা আনার জন্য একটি অনুরোধ শুরু করে।
  • স্বীকার করুন: Pub/Sub-কে সংকেত দেয় যে একটি বার্তা সফলভাবে প্রক্রিয়া করা হয়েছে।

Google ক্লাউড সমতুল্যের জন্য ABAP SDK

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

একটি পুল সদস্যতার জন্য বার্তা প্রবাহ

নিম্নলিখিত চিত্রটি গ্রাহক ক্লায়েন্ট এবং একটি পুল সাবস্ক্রিপশনের মধ্যে কার্যপ্রবাহ দেখায়।

f0fc44265192f348.png

  1. অনুরোধ টানুন: আপনার SAP সিস্টেম (সাবস্ক্রাইবার) পাব/সাব সার্ভার থেকে বার্তাগুলির অনুরোধ করার জন্য পুল পদ্ধতি ব্যবহার করে।
  2. পুল রেসপন্স : পাব/সাব সার্ভার শূন্য বা তার বেশি বার্তা এবং স্বীকৃতি আইডি সহ সাড়া দেয়। শূন্য বার্তা সহ বা একটি ত্রুটি সহ একটি প্রতিক্রিয়া অগত্যা নির্দেশ করে না যে গ্রহণ করার জন্য কোনও বার্তা উপলব্ধ নেই৷ এই প্রতিক্রিয়া হল 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 এ বার্তা পাঠাতে এই পদ্ধতিগুলির মধ্যে একটি বেছে নিন:

  • আপনার প্রোগ্রাম পুনঃব্যবহার করুন: যদি আপনার কাছে প্রকাশের জন্য পূর্ববর্তী কোডল্যাব থেকে প্রোগ্রাম থাকে তবে সেটি ব্যবহার করুন।
  • সরাসরি প্রকাশনা : একটি দ্রুত পরীক্ষার জন্য, নিম্নলিখিত বিকল্পগুলির মধ্যে একটি চেষ্টা করুন:
  • ক্লাউড কনসোল: সরাসরি Google ক্লাউড কনসোলের মধ্যে প্রকাশ করুন। আরো বিস্তারিত জানার জন্য, পাব/সাব ডকুমেন্টেশন দেখুন।
  • gcloud কমান্ড: নিম্নলিখিত কমান্ড চালান:
gcloud pubsub topics publish PUBSUB_DEMO_TOPIC \
--message='{"eventType":"SalesOrderChanged","source":"SAPDEV100","eventTime":"20240207183048","SalesOrder":1000924}'

7. ক্লায়েন্ট কী কনফিগারেশন তৈরি করুন

এখন যেহেতু আপনি Google ক্লাউড সাইডে প্রাক-প্রয়োজনীয়তা সেট আপ করেছেন, আমরা SAP সাইডে কনফিগারেশন নিয়ে এগিয়ে যেতে পারি।

প্রমাণীকরণ এবং সংযোগ সম্পর্কিত কনফিগারেশনের জন্য, Google ক্লাউডের জন্য ABAP SDK টেবিলগুলি /GOOG/CLIENT_KEY এবং /GOOG/SERVIC_MAP.

/GOOG/CLIENT_KEY টেবিলে কনফিগারেশন বজায় রাখতে, নিম্নলিখিত পদক্ষেপগুলি সম্পাদন করুন:

  1. SAP GUI-তে, লেনদেন কোড SPRO লিখুন।
  2. SAP রেফারেন্স IMG এ ক্লিক করুন।
  3. Google ক্লাউড > বেসিক সেটিংস > কনফিগার ক্লায়েন্ট কী-এর জন্য ABAP SDK-এ ক্লিক করুন।

25871e639293b9ee.png

  1. ক্ষেত্রগুলির বিপরীতে নিম্নলিখিত মানগুলি বজায় রাখুন। অন্য সব ক্ষেত্র ফাঁকা রাখুন।

মাঠ

মান

গুগল ক্লাউড কী নাম

PUBSUB_SUBSCRIBER

Google ক্লাউড পরিষেবা অ্যাকাউন্টের নাম

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

গুগল ক্লাউড স্কোপ

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 পাব/সাবস্ক্রাইবার কোড ব্যাখ্যা করা হয়েছে

সারমর্মে, এই ABAP প্রোগ্রামটি Google Cloud Pub/Sub-এর সাথে বার্তা গ্রাহক হিসেবে একীভূত হয়। এটি চাহিদা অনুযায়ী নতুন বার্তাগুলির জন্য একটি নির্দিষ্ট সাবস্ক্রিপশন চেক করে, সেগুলিকে প্রসেস করে এবং তারপরে ভবিষ্যতে পুনঃবিতরন রোধ করতে তাদের অভ্যর্থনা স্বীকার করে৷

প্রোগ্রাম নিম্নলিখিত কার্যক্রম করবে:

ধাপে ধাপে ভাঙ্গন

সংযোগ স্থাপন করুন:

  • এটি /GOOG/CL_PUBSUB_V1 ক্লাস ব্যবহার করে Google ক্লাউড পাব/সাব পরিষেবাতে একটি HTTP সংযোগ স্থাপন করে।

পরামিতি সেট করুন:

  • প্রজেক্ট আইডি : প্রাসঙ্গিক প্রোজেক্ট আইডি বের করে যেখানে পাব/সাবস্ক্রিপশন থাকে।
  • সাবস্ক্রিপশনের নাম: সাবস্ক্রিপশনের নাম উল্লেখ করে যেখান থেকে বার্তাগুলি টেনে আনতে হবে ( PUBSUB_DEMO_SUBSCRIPTION )।
  • বার্তা সীমা : একটি একক API কলে পুনরুদ্ধারের জন্য সর্বাধিক সংখ্যক বার্তা সেট করে (এই ক্ষেত্রে, 1)।

বার্তা আনুন:

  • নির্দিষ্ট সাবস্ক্রিপশন থেকে বার্তাগুলি পুনরুদ্ধার করতে pull_subscriptions পদ্ধতিতে কল করে।

প্রাপ্ত বার্তাগুলি প্রক্রিয়া করুন:

  • বার্তা বিদ্যমান থাকলে, প্রোগ্রামটি ডেটা ডিকোড করে, বিষয়বস্তু লগ করে এবং একটি স্বীকৃতি পাঠায়।

বার্তা স্বীকার করুন:

  • বার্তাগুলির সফল প্রাপ্তি নির্দেশ করে Pub/Sub-এ একটি স্বীকৃতি পাঠাতে acknowledge_subscriptions পদ্ধতিতে কল করে। এটি তাদের পুনরায় বিতরণ করা থেকে বাধা দেয়।

সফলতা/ত্রুটি পরিচালনা করুন:

  • বার্তাগুলি গৃহীত এবং স্বীকার করা হলে সাফল্যের বার্তা প্রদান করে এবং বিভিন্ন ব্যর্থতার পরিস্থিতির জন্য ত্রুটি বার্তা প্রদর্শন করে (কোনও বার্তা প্রাপ্ত হয়নি, API ত্রুটি, ইত্যাদি)৷

সংযোগ বন্ধ করুন:

  • পাব/সাব পরিষেবাতে HTTP সংযোগ বন্ধ করে।

10. অভিনন্দন

"গুগল ক্লাউডের জন্য ABAP SDK ব্যবহার করে ক্লাউড পাব/সাব থেকে একটি ইভেন্ট গ্রহণ করুন" কোডল্যাব সম্পূর্ণ করার চমৎকার কাজ!

আপনি সফলভাবে ABAP এবং Google Cloud Pub/Sub-এর মধ্যে একটি সেতু তৈরি করেছেন! আপনার কোডল্যাব সমাপ্তি ইভেন্ট-চালিত মেসেজিং এবং Google ক্লাউড পরিষেবাগুলির সাথে একীভূত করার জন্য কীভাবে Google ক্লাউডের জন্য ABAP SDK ব্যবহার করতে হয় তার একটি দৃঢ় উপলব্ধি প্রদর্শন করে৷ ভালো হয়েছে!

আপনি ABAP এবং Google ক্লাউড পরিষেবাগুলির মধ্যে একীকরণের একটি নতুন স্তর আনলক করেছেন৷ এই উত্তেজনাপূর্ণ বিকল্পগুলির সাথে আপনার দিগন্ত প্রসারিত করুন:

  • Google ক্লাউডের জন্য ABAP SDK-এর সাথে অনুবাদ API ব্যবহার করা
  • চাঙ্কিং ব্যবহার করে একটি ক্লাউড স্টোরেজ বালতিতে একটি বড় বস্তু আপলোড করুন
  • গুগল ক্লাউডের জন্য ABAP SDK-এর মাধ্যমে সিক্রেট ম্যানেজার থেকে শংসাপত্র/গোপন তথ্য পুনরুদ্ধার করা হচ্ছে
  • ABAP থেকে Vertex AI টেস্ট-বাইসন কল করুন
  • ABAP থেকে BigQuery ML-এ কল করুন

11. পরিষ্কার করুন

আপনি যদি Google ক্লাউডের জন্য ABAP SDK-এর সাথে সম্পর্কিত অতিরিক্ত কোডল্যাবগুলি চালিয়ে যেতে না চান, তাহলে অনুগ্রহ করে পরিষ্কারের সাথে এগিয়ে যান৷

প্রকল্পটি মুছুন

  • Google ক্লাউড প্রকল্প মুছুন:
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