1. 簡介
在本程式碼研究室中,我們列出了使用 ABAP for Google Cloud SDK 將事件發布至 Google Cloud Pub/Sub API 的步驟。
本程式碼研究室會使用下列 Google Cloud 服務:
- Pub/Sub
- Cloud Shell
建構項目
您將學習下列內容:
- 在 Google Cloud 專案中啟用 Pub/Sub。
- 建立 Pub/Sub 主題。
- 發布訊息。
2. 事前準備
- 您已在系統上安裝 ABAP SDK for Google Cloud。您可以參考程式碼研究室 - 在 Google Cloud Platform 上安裝 ABAP 試用版,設定新的系統。
- 您將使用 Cloud Shell,這是在 Google Cloud 中執行的指令列環境。在 Cloud 控制台中,按一下右上角的「啟用 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
3. 總覽
本程式碼研究室的範圍涵蓋 Pub/Sub 服務的下列元件:
- 發布者 (又稱為生產者):建立訊息,並將訊息傳送 (發布) 至指定主題的通訊服務。
- 訊息:透過訊息服務傳送的資料。
- 主題:一種具名實體,代表訊息來源。
4. 設定 Pub/Sub 服務
- 如要建立具有必要角色的服務帳戶,請在 Cloud Shell 終端機中執行下列指令:
gcloud iam service-accounts create abap-sdk-pubsub-tester --display-name="Service Account for PubSub"
- 如要為服務帳戶 (
abap-sdk-poc
) 啟用 Pub/Sub API,請在 Cloud Shell 終端機中執行下列指令:
gcloud services enable pubsub.googleapis.com
- 將 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'
- 將 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'
- 如要確認是否已新增角色,請前往 IAM 頁面。您建立的服務帳戶應會列出已指派給該帳戶的角色。
5. 設定用戶端金鑰
如要維護 /GOOG/CLIENT_KEY
資料表中的設定,請執行下列步驟:
- 在 SAP GUI 中輸入交易代碼 SPRO。
- 按一下「SAP Reference IMG」。
- 依序點選「ABAP SDK for Google Cloud」>「基本設定」>「設定用戶端金鑰」。
- 按一下「新增項目」。
- 請輸入下列欄位的值:
欄位 | 說明 |
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 |
將其他欄位留空
6. 建立主題
您可以使用 API 暫存檔 /GOOG/CL_PUBSUB_V1 的 CREATE_TOPICS 方法建立主題。方法的簽名:
- 在 SAP GUI 中輸入交易代碼 SE38。
- 建立名稱為 ZPUBSUB_DEMO 的報表。
- 在隨即開啟的彈出式視窗中,提供下列詳細資料,然後按一下「儲存」。
- 在下一個彈出式視窗中,選取「Local Object」或提供適當的套件名稱。
- 在 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.
- 儲存並啟用報表。
- 執行報表 (F8)。
執行成功後,您應該會看到下列報表輸出內容:
7. 將訊息發布至主題
主題準備就緒後,我們可以專注於傳送資料。接下來,我們將說明如何發布這個主題的訊息。訊息會使用 API 輔助程式 /GOOG/CL_PUBSUB_V1
的 PUBLISH_TOPICS
方法發布至主題。
方法的簽名:
- 在 SAP GUI 中輸入交易代碼 SE38。
- 建立名稱為 ZPUBSUB_DEMO_PUBLISH 的報表。
- 在隨即開啟的彈出式視窗中,提供下列詳細資料,然後按一下「儲存」。
- 在下一個彈出式視窗中,選取「Local Object」或提供適當的套件名稱。
- 在 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.
- 儲存並啟用報表。
- 執行報表 (F8)。
執行成功後,您應該會看到下列報表輸出內容:
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
刪除個別資源
- 刪除運算執行個體:
gcloud compute instances delete abap-trial-docker
- 刪除防火牆規則:
gcloud compute firewall-rules delete sapmachine
- 刪除服務帳戶:
gcloud iam service-accounts delete \
abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com