Публикация события в Cloud Pub/Sub с помощью ABAP SDK для Google Cloud

1. Введение

В этой лаборатории кода мы перечислили шаги по публикации события в API Google Cloud Pub/Sub с использованием ABAP SDK для Google Cloud .

В этой лаборатории кода используются следующие сервисы Google Cloud:

  • Паб/Саб
  • Облачная оболочка

Что ты построишь

Вы узнаете следующее:

  • Включите Pub/Sub в проекте Google Cloud.
  • Создайте тему 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. Чтобы включить API Pub/Sub для вашей учетной записи службы ( abap-sdk-poc ), выполните следующую команду в терминале Cloud Shell:
gcloud services enable pubsub.googleapis.com
  1. Предоставьте роль IAM pubsub.topics.create учетной записи службы, чтобы иметь возможность создавать темы. Выполните следующую команду в терминале облачной оболочки:
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 учетной записи службы, чтобы иметь возможность публиковать сообщения в теме. Выполните следующую команду в терминале облачной оболочки:
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 введите код транзакции SPRO .
  2. Щелкните Справочное IMG SAP .
  3. Нажмите ABAP SDK для Google Cloud > Основные настройки > Настроить ключ клиента .
  4. Нажмите «Новые записи» .
  5. Введите значения в следующие поля:

Поле

Описание

Имя облачного ключа Google

PUBSUB_DEMO

Имя учетной записи облачной службы Google

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

Облачная область Google

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

Идентификатор проекта Google Cloud

abap-sdk-poc

Класс авторизации

/GOOG/CL_AUTH_GOOGLE

Остальные поля оставьте пустыми

ec6b6f94bfa85533.png

6. Создайте тему

Вы создаете тему, используя метод CREATE_TOPICS заглушки API /GOOG/CL_PUBSUB_V1. Сигнатура метода:

d40fde108ccf2853.png

  1. В графическом интерфейсе SAP введите код транзакции SE38 .
  2. Создайте отчет с именем ZPUBSUB_DEMO .
  3. В открывшемся всплывающем окне укажите детали, как показано ниже, и нажмите «Сохранить».

f9cbdabb6ca96fc4.png

  1. В следующем всплывающем окне выберите «Локальный объект» или укажите имя пакета, если это необходимо.
  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. Опубликовать сообщение в теме

Когда тема готова к работе, мы можем сосредоточиться на отправке данных. В качестве следующего шага научимся публиковать сообщения на эту тему. Сообщения публикуются в теме с помощью метода PUBLISH_TOPICS API-заглушки /GOOG/CL_PUBSUB_V1 .

Сигнатура метода:

459fe21ce68bd811.png

  1. В графическом интерфейсе SAP введите код транзакции SE38.
  2. Создайте отчет с именем ZPUBSUB_DEMO_PUBLISH .
  3. В открывшемся всплывающем окне укажите детали, как показано ниже, и нажмите «Сохранить».

9a180c4e9a1e139.png

  1. В следующем всплывающем окне выберите «Локальный объект» или укажите имя пакета, если это необходимо.
  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. Поздравления

Поздравляем! Вы успешно опубликовали сообщение в API Pub/Sub Google Cloud Platform с помощью ABAP SDK для Google Cloud.

Теперь вы можете приступить к выполнению приведенной ниже таблицы кода и продолжить обучение использованию ABAP SDK для доступа к различным облачным службам Google.

  • Получить событие из Cloud Pub/Sub
  • Загрузите файл в корзину облачного хранилища с помощью фрагментации
  • Вызов Vertex AI test-bison из ABAP
  • . . .

9. Очистка

Если вы не хотите продолжать работу с дополнительными лабораториями кода, связанными с ABAP SDK для Google Cloud, продолжите очистку.

Удалить проект

  • Удалите проект 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