使用 Google Cloud 適用的 ABAP SDK 將事件發布至 Cloud Pub/Sub

使用 ABAP SDK for Google Cloud 將事件發布至 Cloud Pub/Sub

程式碼研究室簡介

subject上次更新時間:9月 4, 2024
account_circle作者:Sanchita Mohta

1. 簡介

在本程式碼研究室中,我們列出了使用 ABAP for Google Cloud SDK 將事件發布至 Google Cloud Pub/Sub API 的步驟。

本程式碼研究室會使用下列 Google Cloud 服務:

  • Pub/Sub
  • Cloud Shell

建構項目

您將學習下列內容:

  • 在 Google Cloud 專案中啟用 Pub/Sub。
  • 建立 Pub/Sub 主題。
  • 發布訊息。

2. 事前準備

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

3. 總覽

本程式碼研究室的範圍涵蓋 Pub/Sub 服務的下列元件:

  • 發布者 (又稱為生產者):建立訊息,並將訊息傳送 (發布) 至指定主題的通訊服務。
  • 訊息:透過訊息服務傳送的資料。
  • 主題:一種具名實體,代表訊息來源。

4f5676da8922467f.png

4. 設定 Pub/Sub 服務

  1. 如要建立具有必要角色的服務帳戶,請在 Cloud Shell 終端機中執行下列指令:
gcloud iam service-accounts create abap-sdk-pubsub-tester --display-name="Service Account for PubSub"
  1. 如要為服務帳戶 (abap-sdk-poc) 啟用 Pub/Sub API,請在 Cloud Shell 終端機中執行下列指令:
gcloud services enable pubsub.googleapis.com
  1. 將 IAM 角色 pubsub.topics.create 授予服務帳戶,以便建立主題。在 Cloud Shell 終端機中執行下列指令:
gcloud endpoints services add-iam-policy-binding pubsub.googleapis.com \ --member='serviceAccount:abap-sdk-pubusb-tester@abap-sdk-poc.iam.gserviceaccount.com' \
--role='roles/roles/pubsub.topics.create'
  1. 將 IAM 角色 pubsub.topics.publish 授予服務帳戶,以便將訊息發布至主題。在 Cloud Shell 終端機中執行下列指令:
gcloud endpoints services add-iam-policy-binding pubsub.googleapis.com \ --member='serviceAccount:abap-sdk-pubusb-tester@abap-sdk-poc.iam.gserviceaccount.com' \
--role='roles/roles/pubsub.topics.publish'
  1. 如要確認是否已新增角色,請前往 IAM 頁面。您建立的服務帳戶應會列出已指派給該帳戶的角色。

5. 設定用戶端金鑰

如要維護 /GOOG/CLIENT_KEY 資料表中的設定,請執行下列步驟:

  1. 在 SAP GUI 中輸入交易代碼 SPRO
  2. 按一下「SAP Reference IMG」
  3. 依序點選「ABAP SDK for Google Cloud」>「基本設定」>「設定用戶端金鑰」
  4. 按一下「新增項目」
  5. 請輸入下列欄位的值:

欄位

說明

Google Cloud 金鑰名稱

PUBSUB_DEMO

Google Cloud 服務帳戶名稱

abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com

Google Cloud 範圍

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

Google Cloud 專案 ID

abap-sdk-poc

授權類別

/GOOG/CL_AUTH_GOOGLE

將其他欄位留空

ec6b6f94bfa85533.png

6. 建立主題

您可以使用 API 暫存檔 /GOOG/CL_PUBSUB_V1 的 CREATE_TOPICS 方法建立主題。方法的簽名:

d40fde108ccf2853.png

  1. 在 SAP GUI 中輸入交易代碼 SE38
  2. 建立名稱為 ZPUBSUB_DEMO 的報表。
  3. 在隨即開啟的彈出式視窗中,提供下列詳細資料,然後按一下「儲存」

f9cbdabb6ca96fc4.png

  1. 在下一個彈出式視窗中,選取「Local Object」或提供適當的套件名稱。
  2. 在 ABAP 編輯器中新增下列程式碼:
" Data Declaration
DATA:
 
lo_client        TYPE REF TO /goog/cl_pubsub_v1.

TRY.
   
" Open HTTP Connection
   
CREATE OBJECT lo_client EXPORTING iv_key_name = 'PUBSUB_DEMO'.

   
" Populate relevant parameters
   
DATA(lv_p_projects_id) = CONV string( lo_client->gv_project_id ).
   
DATA(lv_p_topics_id) = CONV string( 'PUBSUB_DEMO_TOPIC' ).

   
" Call API method pubsub.topics.create
   
lo_client->create_topics(
     
EXPORTING
       
iv_p_projects_id = lv_p_projects_id
       
iv_p_topics_id   = lv_p_topics_id
     
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 ) = abap_true.
     
DATA(lv_msg) = 'Topic ' && ':' && lv_p_topics_id && ' was created!'.
     
MESSAGE lv_msg TYPE 'I' .
   
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'.
   
RETURN.
ENDTRY.
  1. 儲存並啟用報表。
  2. 執行報表 (F8)。

執行成功後,您應該會看到下列報表輸出內容:

16aa8a4c59d776d9.png

7. 將訊息發布到主題

主題準備就緒後,我們可以專注於傳送資料。接下來,我們將說明如何發布這個主題的訊息。訊息會使用 API 輔助程式 /GOOG/CL_PUBSUB_V1PUBLISH_TOPICS 方法發布至主題。

方法的簽名:

459fe21ce68bd811.png

  1. 在 SAP GUI 中輸入交易代碼 SE38
  2. 建立名稱為 ZPUBSUB_DEMO_PUBLISH 的報表。
  3. 在隨即開啟的彈出式視窗中,提供下列詳細資料,然後按一下「儲存」

9a180c4e9a1e139.png

  1. 在下一個彈出式視窗中,選取「Local Object」或提供適當的套件名稱。
  2. 在 ABAP 編輯器中新增下列程式碼:
" Data Declaration
DATA:
 
lo_client        TYPE REF TO /goog/cl_pubsub_v1,
 
ls_message       TYPE /goog/cl_pubsub_v1=>ty_025,
 
ls_input         TYPE /goog/cl_pubsub_v1=>ty_023.

TRY.
   
" Open HTTP Connection
   
CREATE OBJECT lo_client EXPORTING iv_key_name = 'PUBSUB_DEMO'.

   
" Populate relevant parameters
   
DATA(lv_p_projects_id) = CONV string( lo_client->gv_project_id ).
   
DATA(lv_p_topics_id) = CONV string( 'PUBSUB_DEMO_TOPIC' ).

   
ls_message-data = cl_http_utility=>encode_base64( unencoded = ' This message was published to topic' ).
   
APPEND ls_message TO ls_input-messages.

   
" Call API method : pubsub.topics.publish
   
" This method publishes the message(encoded in base64 format to the topic )
   
lo_client->publish_topics(
     
EXPORTING
       
iv_p_projects_id = lv_p_projects_id
       
iv_p_topics_id   = lv_p_topics_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 ) = abap_true.
       
DATA(lv_msg) = 'Message was published to topic '  && ': ' &&         lv_p_topics_id.
     
MESSAGE lv_msg TYPE 'I' DISPLAY LIKE 'S'.

   
ELSE.
     
MESSAGE lv_err_text TYPE 'E'.
   
ENDIF.

   
" Close HTTP Connection
   
lo_client->close( ).

 
CATCH /goog/cx_sdk INTO DATA(lo_exception).
   
MESSAGE lv_err_text TYPE 'E'.
   
RETURN.
ENDTRY.
  1. 儲存並啟用報表。
  2. 執行報表 (F8)。

執行成功後,您應該會看到下列報表輸出內容:

384125235efc104.png

8. 恭喜

恭喜!您已使用 ABAP SDK for Google Cloud,成功將訊息發布至 Google Cloud Platform 的 Pub/Sub API。

您現在可以繼續進行下列程式碼研究室,繼續學習如何使用 ABAP SDK 存取各種 Google Cloud 服務。

  • 接收 Cloud Pub/Sub 傳送的事件
  • 使用分割功能將檔案上傳至 Cloud Storage 值區
  • 從 ABAP 呼叫 Vertex AI test-bison
  • . . 。

9. 清除所用資源

如果您不想繼續進行與 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-dev@abap-sdk-poc.iam.gserviceaccount.com