Publicar um evento no Cloud Pub/Sub usando o SDK do ABAP para o Google Cloud

Publicar um evento no Cloud Pub/Sub usando o SDK ABAP for Google Cloud

Sobre este codelab

subjectÚltimo set. 4, 2024 atualizado
account_circleEscrito por Sanchita Mohta

1. Introdução

Neste codelab, listamos as etapas para publicar um evento na API Google Cloud Pub/Sub usando o SDK ABAP para Google Cloud.

Os seguintes serviços do Google Cloud são usados neste codelab:

  • Pub/Sub
  • Cloud Shell

O que você vai criar

Você vai aprender o seguinte:

  • Ativar o Pub/Sub em um projeto do Google Cloud
  • Crie um tópico do Pub/Sub.
  • Publicar mensagens.

2. Antes de começar

6757b2fb50ddcc2d.png

  • Execute os comandos a seguir para fazer a autenticação da sua conta e definir o projeto padrão como abap-sdk-poc. A zona us-west4-b é usada como exemplo. Se necessário, mude o projeto e a zona nos comandos a seguir de acordo com sua preferência.
gcloud auth login
gcloud config
set project abap-sdk-poc
gcloud config
set compute/zone us-west4-b

3. Visão geral

O escopo deste codelab envolve os seguintes componentes de um serviço do Pub/Sub:

  • Editor (também chamado de produtor): cria mensagens e as envia (publica) para o serviço de mensagens em um tópico especificado.
  • Mensagem: os dados que são transferidos pelo serviço de mensagens.
  • Tópico: uma entidade nomeada que representa um feed de mensagens.

4f5676da8922467f.png

4. Configurar o serviço do Pub/Sub

  1. Para criar uma conta de serviço com a função necessária, execute o seguinte comando no terminal do Cloud Shell:
gcloud iam service-accounts create abap-sdk-pubsub-tester --display-name="Service Account for PubSub"
  1. Para ativar a API Pub/Sub na sua conta de serviço (abap-sdk-poc), execute o seguinte comando no terminal do Cloud Shell:
gcloud services enable pubsub.googleapis.com
  1. Conceda o papel do IAM pubsub.topics.create à conta de serviço para criar um tópico. Execute o seguinte comando no terminal do 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. Conceda o papel do IAM pubsub.topics.publish à conta de serviço para publicar uma mensagem no tópico. Execute o seguinte comando no terminal do 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. Para verificar se os papéis foram adicionados, acesse a página IAM. A conta de serviço que você criou vai aparecer na lista com as funções que foram atribuídas a ela.

5. Configurar chave do cliente

Para manter a configuração na tabela /GOOG/CLIENT_KEY, siga estas etapas:

  1. Na GUI do SAP, insira o código da transação SPRO.
  2. Clique em IMG de referência SAP.
  3. Clique em ABAP SDK for Google Cloud > Configurações básicas > Configurar chave do cliente.
  4. Clique em Novas entradas.
  5. Insira valores nos campos a seguir:

Campo

Descrição

Nome da chave do Google Cloud

PUBSUB_DEMO

Nome da conta de serviço do Google Cloud

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

Escopo do Google Cloud

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

Identificador de projeto do Google Cloud

abap-sdk-poc

Classe de autorização

/GOOG/CL_AUTH_GOOGLE

Deixe os outros campos em branco

ec6b6f94bfa85533.png

6. Criar um tópico

Você cria um tópico usando o método CREATE_TOPICS do stub de API /GOOG/CL_PUBSUB_V1. Assinatura do método:

d40fde108ccf2853.png

  1. Na GUI do SAP, insira o código de transação SE38.
  2. Crie um relatório com o nome ZPUBSUB_DEMO.
  3. No pop-up que abrir, forneça os detalhes conforme mostrado abaixo e clique em Salvar.

f9cbdabb6ca96fc4.png

  1. No próximo pop-up, selecione Objeto local ou informe um nome de pacote, conforme apropriado.
  2. No Editor ABAP, adicione o seguinte código:
" 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. Salve e ative o relatório.
  2. Execute o relatório (F8).

Se a execução for bem-sucedida, você vai ver a saída do relatório, conforme mostrado abaixo:

16aa8a4c59d776d9.png

7. Publicar a mensagem no tópico

Com o tema pronto, agora podemos nos concentrar no envio de dados. Na próxima etapa, vamos aprender a publicar mensagens sobre esse tópico. As mensagens são publicadas no tópico usando o método PUBLISH_TOPICS do stub da API /GOOG/CL_PUBSUB_V1.

Assinatura do método:

459fe21ce68bd811.png

  1. Na GUI do SAP, insira o código de transação SE38.
  2. Crie um relatório com o nome ZPUBSUB_DEMO_PUBLISH.
  3. No pop-up que abrir, forneça os detalhes conforme mostrado abaixo e clique em Salvar.

9a180c4e9a1e139.png

  1. No próximo pop-up, selecione Objeto local ou informe um nome de pacote, conforme apropriado.
  2. No Editor ABAP, adicione o seguinte código:
" 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. Salve e ative o relatório.
  2. Execute o relatório (F8).

Se a execução for bem-sucedida, você vai ver a saída do relatório, conforme mostrado abaixo:

384125235efc104.png

8. Parabéns

Parabéns! Você publicou uma mensagem na API Pub/Sub da plataforma usando o SDK ABAP para Google Cloud.

Agora você pode prosseguir com o codelab abaixo para continuar sua jornada de aprendizado sobre como usar o SDK ABAP para acessar vários serviços do Google Cloud.

  • Receber um evento do Cloud Pub/Sub
  • Fazer upload de um arquivo para um bucket do Cloud Storage com divisão em blocos
  • Chamar o test-bison da Vertex AI no ABAP
  • . . .

9. Limpar

Se você não quiser continuar com os outros codelabs relacionados ao SDK ABAP para Google Cloud, prossiga com a limpeza.

Excluir o projeto

  • Exclua o projeto do Google Cloud:
gcloud projects delete abap-sdk-poc

Excluir recursos individuais

  1. Exclua a instância de computação:
gcloud compute instances delete abap-trial-docker
  1. Exclua as regras de firewall:
gcloud compute firewall-rules delete sapmachine
  1. Exclua a conta de serviço:
gcloud iam service-accounts delete \
    abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com