Xuất bản một sự kiện lên Cloud Pub/Sub bằng cách sử dụng SDK ABAP cho Google Cloud

1. Giới thiệu

Trong lớp học lập trình này, chúng tôi đã liệt kê các bước để xuất bản một sự kiện lên API Google Cloud Pub/Sub bằng ABAP SDK cho Google Cloud.

Các dịch vụ sau đây của Google Cloud được dùng trong lớp học lập trình này:

  • Pub/Sub
  • Cloud Shell

Sản phẩm bạn sẽ tạo ra

Bạn sẽ tìm hiểu những điều sau:

  • Bật Pub/Sub trong một dự án Google Cloud.
  • Tạo một chủ đề Pub/Sub.
  • Xuất bản thông báo.

2. Trước khi bắt đầu

6757b2fb50ddcc2d.png

  • Chạy các lệnh sau để xác thực tài khoản của bạn và đặt dự án mặc định thành abap-sdk-poc. Vùng us-west4-b được dùng làm ví dụ. Nếu cần, vui lòng thay đổi dự án và khu vực trong các lệnh sau dựa trên lựa chọn ưu tiên của bạn.
gcloud auth login
gcloud config set project abap-sdk-poc
gcloud config set compute/zone us-west4-b

3. Tổng quan

Phạm vi của lớp học lập trình này bao gồm các thành phần sau đây của dịch vụ Pub/Sub:

  • Nhà xuất bản (còn gọi là nhà sản xuất): tạo tin nhắn và gửi (xuất bản) tin nhắn đó đến dịch vụ nhắn tin theo một chủ đề cụ thể.
  • Thông báo: dữ liệu di chuyển qua dịch vụ nhắn tin.
  • Chủ đề: một thực thể được đặt tên, đại diện cho một nguồn cấp dữ liệu gồm các thông báo.

4f5676da8922467f.png

4. Thiết lập dịch vụ Pub/Sub

  1. Để tạo tài khoản dịch vụ có vai trò bắt buộc, hãy chạy lệnh sau trong thiết bị đầu cuối Cloud Shell:
gcloud iam service-accounts create abap-sdk-pubsub-tester --display-name="Service Account for PubSub"
  1. Để bật API Pub/Sub cho tài khoản dịch vụ của bạn (abap-sdk-poc), hãy chạy lệnh sau trong thiết bị đầu cuối Cloud Shell:
gcloud services enable pubsub.googleapis.com
  1. Cấp vai trò IAM pubsub.topics.create cho tài khoản dịch vụ để có thể tạo một chủ đề. Chạy lệnh sau trong cửa sổ dòng lệnh của 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. Cấp vai trò IAM pubsub.topics.publish cho tài khoản dịch vụ để có thể xuất bản một thông báo cho chủ đề. Chạy lệnh sau trong cửa sổ dòng lệnh của 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. Để xác minh rằng các vai trò đã được thêm, hãy chuyển đến trang IAM. Tài khoản dịch vụ mà bạn đã tạo sẽ xuất hiện cùng với các vai trò đã được chỉ định cho tài khoản đó.

5. Định cấu hình khoá ứng dụng

Để duy trì cấu hình trong bảng /GOOG/CLIENT_KEY, hãy làm theo các bước sau:

  1. Trong SAP GUI, hãy nhập mã giao dịch SPRO.
  2. Nhấp vào SAP Reference IMG.
  3. Nhấp vào ABAP SDK for Google Cloud > Basic Settings > Configure Client Key (ABAP SDK cho Google Cloud > Cài đặt cơ bản > Định cấu hình khoá ứng dụng).
  4. Nhấp vào Mục mới.
  5. Nhập giá trị cho các trường sau:

Trường

Nội dung mô tả

Tên khoá Google Cloud

PUBSUB_DEMO

Tên tài khoản dịch vụ Google Cloud

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

Phạm vi Google Cloud

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

Mã nhận dạng dự án trên Google Cloud

abap-sdk-poc

Lớp uỷ quyền

/GOOG/CL_AUTH_GOOGLE

Để trống các trường khác

ec6b6f94bfa85533.png

6. Tạo một chủ đề

Bạn tạo một chủ đề bằng phương thức CREATE_TOPICS của API stub /GOOG/CL_PUBSUB_V1. Chữ ký của phương thức:

d40fde108ccf2853.png

  1. Trong SAP GUI, hãy nhập mã giao dịch SE38.
  2. Tạo báo cáo có tên ZPUBSUB_DEMO.
  3. Trong cửa sổ bật lên, hãy cung cấp thông tin chi tiết như minh hoạ bên dưới, rồi nhấp vào Lưu.

f9cbdabb6ca96fc4.png

  1. Trong cửa sổ bật lên tiếp theo, hãy chọn Local Object hoặc cung cấp tên gói nếu thích hợp.
  2. Trong Trình chỉnh sửa ABAP, hãy thêm đoạn mã sau:
" 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. Lưu và kích hoạt báo cáo.
  2. Thực thi báo cáo (F8).

Khi thực thi thành công, bạn sẽ thấy kết quả báo cáo như minh hoạ dưới đây:

16aa8a4c59d776d9.png

7. Xuất bản thông báo lên chủ đề

Khi chủ đề đã sẵn sàng, giờ đây, chúng ta có thể tập trung vào việc gửi dữ liệu theo cách của mình. Bước tiếp theo, hãy tìm hiểu cách xuất bản thông báo về chủ đề này. Thông báo được xuất bản cho chủ đề bằng phương thức PUBLISH_TOPICS của phần gốc API /GOOG/CL_PUBSUB_V1.

Chữ ký của phương thức:

459fe21ce68bd811.png

  1. Trong SAP GUI, hãy nhập mã giao dịch SE38.
  2. Tạo báo cáo có tên ZPUBSUB_DEMO_PUBLISH.
  3. Trong cửa sổ bật lên, hãy cung cấp thông tin chi tiết như minh hoạ bên dưới, rồi nhấp vào Lưu.

9a180c4e9a1e139.png

  1. Trong cửa sổ bật lên tiếp theo, hãy chọn Local Object hoặc cung cấp tên gói nếu thích hợp.
  2. Trong Trình chỉnh sửa ABAP, hãy thêm đoạn mã sau:
" 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. Lưu và kích hoạt báo cáo.
  2. Thực thi báo cáo (F8).

Khi thực thi thành công, bạn sẽ thấy kết quả báo cáo như minh hoạ dưới đây:

384125235efc104.png

8. Xin chúc mừng

Xin chúc mừng! Bạn đã xuất bản thành công một thông báo đến API Pub/Sub của Google Cloud Platform bằng ABAP SDK cho Google Cloud.

Giờ đây, bạn có thể tiếp tục với lớp học lập trình bên dưới để tiếp tục hành trình học tập cách sử dụng ABAP SDK để truy cập vào nhiều dịch vụ của Google Cloud.

  • Nhận một sự kiện từ Cloud Pub/Sub
  • Tải tệp lên bộ chứa lưu trữ trên đám mây bằng tính năng phân đoạn
  • Gọi Vertex AI test-bison từ ABAP
  • . . .

9. Dọn dẹp

Nếu bạn không muốn tiếp tục với các khoá học lập trình bổ sung liên quan đến ABAP SDK cho Google Cloud, vui lòng tiến hành dọn dẹp.

Xoá dự án

  • Xoá dự án trên Google Cloud:
gcloud projects delete abap-sdk-poc

Xoá từng tài nguyên

  1. Xoá phiên bản điện toán:
gcloud compute instances delete abap-trial-docker
  1. Xoá các quy tắc về tường lửa:
gcloud compute firewall-rules delete sapmachine
  1. Xoá tài khoản dịch vụ:
gcloud iam service-accounts delete \
    abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com