Pubblica un evento in Cloud Pub/Sub utilizzando l'SDK ABAP per Google Cloud

1. Introduzione

In questo codelab sono elencati i passaggi per pubblicare un evento nell'API Google Cloud Pub/Sub utilizzando l'ABAP SDK for Google Cloud.

In questo codelab vengono utilizzati i seguenti servizi Google Cloud:

  • Pub/Sub
  • Cloud Shell

Cosa creerai

Imparerai quanto segue:

  • Abilitare Pub/Sub in un progetto Google Cloud.
  • Creare un argomento Pub/Sub.
  • Pubblicare messaggi.

2. Prima di iniziare

6757b2fb50ddcc2d.png

  • Esegui questi comandi per autenticarti per il tuo account e impostare il progetto predefinito su abap-sdk-poc. La zona us-west4-b viene utilizzata come esempio. Se necessario, modifica il progetto e la zona nei seguenti comandi in base alle tue preferenze.
gcloud auth login
gcloud config set project abap-sdk-poc
gcloud config set compute/zone us-west4-b

3. Panoramica

L'ambito di questo codelab riguarda i seguenti componenti di un servizio Pub/Sub:

  • Publisher (chiamato anche producer): crea messaggi e li invia (pubblica) al servizio di messaggistica su un argomento specificato.
  • Messaggio: i dati che si spostano attraverso il servizio di messaggistica.
  • Argomento: un'entità denominata che rappresenta un feed di messaggi.

4f5676da8922467f.png

4. Configurare il servizio Pub/Sub

  1. Per creare un service account con il ruolo richiesto, esegui questo comando nel terminale Cloud Shell:
gcloud iam service-accounts create abap-sdk-pubsub-tester --display-name="Service Account for PubSub"
  1. Per abilitare l'API Pub/Sub al tuo service account (abap-sdk-poc), esegui il comando seguente nel terminale Cloud Shell:
gcloud services enable pubsub.googleapis.com
  1. Concedi il ruolo IAM pubsub.topics.create al service account per poter creare un argomento. Esegui questo comando nel terminale 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. Concedi il ruolo IAM pubsub.topics.publish al service account per poter pubblicare un messaggio nell'argomento. Esegui questo comando nel terminale 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. Per verificare che i ruoli siano stati aggiunti, vai alla pagina IAM. Il service account che hai creato dovrebbe essere elencato insieme ai ruoli che gli sono stati assegnati.

5. Configura la chiave client

Per mantenere la configurazione nella tabella /GOOG/CLIENT_KEY, segui questi passaggi:

  1. Nella GUI SAP, inserisci il codice transazione SPRO.
  2. Fai clic su SAP Reference IMG.
  3. Fai clic su ABAP SDK for Google Cloud > Impostazioni di base > Configura chiave client.
  4. Fai clic su Nuove voci.
  5. Inserisci i valori per i seguenti campi:

Campo

Descrizione

Nome della chiave Google Cloud

PUBSUB_DEMO

Nome dell'account di servizio Google Cloud

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

Ambito Google Cloud

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

Identificatore progetto Google Cloud

abap-sdk-poc

Authorization Class

/GOOG/CL_AUTH_GOOGLE

Lascia vuoti gli altri campi

ec6b6f94bfa85533.png

6. Crea un argomento

Crea un argomento utilizzando il metodo CREATE_TOPICS dello stub API /GOOG/CL_PUBSUB_V1. Firma del metodo:

d40fde108ccf2853.png

  1. Nella GUI SAP, inserisci il codice transazione SE38.
  2. Crea un report con il nome ZPUBSUB_DEMO.
  3. Nel popup che si apre, fornisci i dettagli come mostrato di seguito e fai clic su Salva.

f9cbdabb6ca96fc4.png

  1. Nel popup successivo, seleziona Oggetto locale o fornisci un nome di pacchetto, a seconda dei casi.
  2. Nell'editor ABAP, aggiungi il seguente codice:
" 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. Salva e attiva il report.
  2. Esegui il report (F8).

Se l'esecuzione va a buon fine, dovresti visualizzare l'output del report come mostrato di seguito:

16aa8a4c59d776d9.png

7. Pubblica un messaggio nell'argomento

Con l'argomento pronto, ora possiamo concentrarci sull'invio dei dati. Come passaggio successivo, scopriamo come pubblicare messaggi in questo argomento. I messaggi vengono pubblicati nell'argomento utilizzando il metodo PUBLISH_TOPICS dello stub API /GOOG/CL_PUBSUB_V1.

Firma del metodo:

459fe21ce68bd811.png

  1. Nella GUI di SAP, inserisci il codice di transazione SE38.
  2. Crea un report con il nome ZPUBSUB_DEMO_PUBLISH.
  3. Nel popup che si apre, fornisci i dettagli come mostrato di seguito e fai clic su Salva.

9a180c4e9a1e139.png

  1. Nel popup successivo, seleziona Oggetto locale o fornisci un nome di pacchetto, a seconda dei casi.
  2. Nell'editor ABAP, aggiungi il seguente codice:
" 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. Salva e attiva il report.
  2. Esegui il report (F8).

Se l'esecuzione va a buon fine, dovresti visualizzare l'output del report come mostrato di seguito:

384125235efc104.png

8. Complimenti

Complimenti! Hai pubblicato correttamente un messaggio nell'API Pub/Sub di Google Cloud utilizzando ABAP SDK for Google Cloud.

Ora puoi procedere con il codelab riportato di seguito per continuare il tuo percorso di apprendimento sull'utilizzo dell'SDK ABAP per accedere a vari servizi Google Cloud.

  • Ricevere un evento da Cloud Pub/Sub
  • Carica un file in un bucket Cloud Storage con il chunking
  • Chiamare Vertex AI test-bison da ABAP
  • . . .

9. Esegui la pulizia

Se non vuoi continuare con i codelab aggiuntivi relativi all'SDK ABAP per Google Cloud, procedi con la pulizia.

Eliminare il progetto

  • Elimina il progetto Google Cloud:
gcloud projects delete abap-sdk-poc

Eliminare singole risorse

  1. Elimina l'istanza di calcolo:
gcloud compute instances delete abap-trial-docker
  1. Elimina le regole firewall:
gcloud compute firewall-rules delete sapmachine
  1. Elimina il account di servizio:
gcloud iam service-accounts delete \
    abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com