1. Wprowadzenie
Ten przewodnik przeprowadzi Cię przez proces odbierania szczegółów zdarzeń z tematu Google Cloud Pub/Sub za pomocą ABAP SDK for Google Cloud. Będziemy korzystać z tych usług Google Cloud:
- Cloud Pub/Sub
- Cloud Shell
Wymagania wstępne
- Upewnij się, że masz dostęp do systemu SAP z zainstalowanym pakietem ABAP SDK for Google Cloud.
- Aby skonfigurować nowy system, zapoznaj się z samouczkiem „Install ABAP Platform Trial on Google Cloud Platform and Install ABAP SDK” (Instalowanie wersji próbnej platformy ABAP na Google Cloud Platform i instalowanie pakietu ABAP SDK).
- W ramach laboratorium „ Wysyłanie zdarzeń z SAP do Pub/Sub za pomocą pakietu ABAP SDK” w projekcie Google Cloud utworzono temat
PUBSUB_DEMO_TOPIC
. Jeśli nie została utworzona, użyj tego polecenia:
gcloud pubsub topics create PUBSUB_DEMO_TOPIC
Co utworzysz
Utworzysz:
- Konto usługi z uprawnieniami „Subskrybujący” do interakcji z interfejsem Pub/Sub API.
- Program ABAP do odbierania i potwierdzania wiadomości z tematu Pub/Sub.
2. Wymagania
- przeglądarki, np. Chrome lub Firefox;
- Projekt Google Cloud z włączonym rozliczeniem lub utwórz 90-dniowe konto próbne w Google Cloud Platform.
- SAP GUI (Windows lub Java) zainstalowany w systemie. Jeśli SAP GUI jest już zainstalowany na laptopie, połącz się z SAP, używając zewnętrznego adresu IP maszyny wirtualnej jako adresu IP serwera aplikacji. Jeśli korzystasz z komputera Mac, możesz też zainstalować interfejs SAP GUI dla Javy, który jest dostępny pod tym linkiem.
3. Zanim zaczniesz
- W konsoli Google Cloud na stronie selektora projektów wybierz lub utwórz projekt Google Cloud (np.
abap-sdk-poc
). - Sprawdź, czy w projekcie Cloud włączone są płatności. Dowiedz się, jak sprawdzić, czy w projekcie włączone są płatności. Pomiń ten krok, jeśli korzystasz z 90-dniowego konta próbnego.
- Będziesz używać Cloud Shell, czyli środowiska wiersza poleceń działającego w Google Cloud. W prawym górnym rogu Cloud Console kliknij Aktywuj Cloud Shell:
- Uruchom te polecenia, aby uwierzytelnić się na koncie i ustawić domyślny projekt na
abap-sdk-poc
. Jako przykładu używamy strefyus-west4-b
. W razie potrzeby zmień projekt i strefę w tych poleceniach zgodnie ze swoimi preferencjami.
gcloud auth login
gcloud config set project abap-sdk-poc
gcloud config set compute/zone us-west4-b
- W ramach poprzedniego laboratorium „Wysyłanie zdarzenia do Pub/Sub” musisz już mieć włączony interfejs Pub/Sub API, utworzony temat i opublikowane wiadomości w Pub/Sub.
4. Tworzenie konta usługi na potrzeby dostępu do Pub/Sub
Używanie konta usługi z rolą Subscriber
to najbezpieczniejszy sposób odbierania wiadomości z Pub/Sub przez program ABAP. Ta rola ogranicza uprawnienia tylko do pobierania wiadomości, co zapobiega potencjalnym lukom w zabezpieczeniach.
Tworzenie konta usługi
Aby utworzyć konto usługi z wymaganą rolą, wykonaj te czynności:
- Uruchom w terminalu Cloud Shell to polecenie:
gcloud iam service-accounts \
create abap-sdk-pubsub-subscriber \
--display-name="Service Account for Pub/Sub Subscriber"
- Teraz dodaj wymagane role do konta usługi utworzonego w powyższym kroku:
gcloud projects add-iam-policy-binding abap-sdk-poc \
--member='serviceAccount:abap-sdk-pubsub-subscriber@abap-sdk-poc.iam.gserviceaccount.com' \
--role='roles/pubsub.subscriber'
W powyższym poleceniu abap-sdk-poc
jest symbolem zastępczym projektu Google Cloud. Zastąp abap-sdk-poc
identyfikatorem projektu.
- Aby sprawdzić, czy rola została dodana, otwórz stronę IAM. Utworzone konto usługi powinno być widoczne wraz z przypisaną do niego rolą.
5. Informacje o subskrypcjach pull
W przypadku subskrypcji pull system SAP działa jako aplikacja subskrybująca i inicjuje żądania do serwera Pub/Sub w celu pobrania wiadomości. Aplikacja subskrybująca używa interfejsu REST Pull API.
Kluczowe metody interfejsu API
Google Cloud Pub/Sub API
- pull: inicjuje prośbę o pobranie wiadomości.
- acknowledge: wysyła do Pub/Sub sygnał, że wiadomość została przetworzona.
Odpowiedniki w ABAP SDK for Google Cloud
- /GOOG/CL_PUBSUB_V1 -> PULL_SUBSCRIPTIONS
- /GOOG/CL_PUBSUB_V1 -> ACKNOWLEDGE_SUBSCRIPTIONS
Przepływ wiadomości w przypadku subskrypcji typu pull
Obraz poniżej przedstawia proces wymiany informacji między aplikacją subskrybującą a subskrypcją typu pull.
- Żądanie pull: system SAP (subskrybent) używa metody pull do żądania wiadomości od serwera Pub/Sub.
- Pull Response: serwer Pub/Sub odpowiada zerem lub większą liczbą wiadomości i identyfikatorów potwierdzenia. Odpowiedź z zerową liczbą wiadomości lub z błędem nie musi oznaczać, że nie ma wiadomości do odebrania. Ta odpowiedź to PullResponse, jak pokazano na obrazie.
- Potwierdzenie: po przetworzeniu wiadomości system SAP używa metody potwierdzenia wraz z otrzymanym identyfikatorem potwierdzenia. Zapobiega to ponownemu dostarczeniu wiadomości przez Pub/Sub.
6. Konfigurowanie subskrypcji i wysyłanie wiadomości
Tworzenie subskrypcji pull
- Aby utworzyć subskrypcję typu pull o nazwie
PUBSUB_DEMO_SUBSCRIPTION
, która będzie odbierać wiadomości zPUBSUB_DEMO_TOPIC
, wykonaj to polecenie gcloud:
gcloud pubsub subscriptions create PUBSUB_DEMO_SUBSCRIPTION \
--topic=PUBSUB_DEMO_TOPIC
Publikowanie wiadomości
Aby wysłać wiadomości do PUBSUB_DEMO_TOPIC
, wybierz jedną z tych metod:
- Ponowne użycie programu: jeśli masz program z poprzednich warsztatów dotyczących publikowania, użyj go.
- Bezpośrednie publikowanie: aby szybko przeprowadzić test, wypróbuj jedną z tych opcji:
- Cloud Console: publikuj bezpośrednio w konsoli Google Cloud. Więcej informacji znajdziesz w dokumentacji Pub/Sub.
- Polecenie gcloud: uruchom to polecenie:
gcloud pubsub topics publish PUBSUB_DEMO_TOPIC \
--message='{"eventType":"SalesOrderChanged","source":"SAPDEV100","eventTime":"20240207183048","SalesOrder":1000924}'
7. Tworzenie konfiguracji klucza klienta
Po skonfigurowaniu wymagań wstępnych po stronie Google Cloud możemy przejść do konfiguracji po stronie SAP.
W przypadku konfiguracji związanej z uwierzytelnianiem i łącznością pakiet ABAP SDK for Google Cloud korzysta z tabel /GOOG/CLIENT_KEY
i /GOOG/SERVIC_MAP.
.
Aby zachować konfigurację w tabeli /GOOG/CLIENT_KEY
, wykonaj te czynności:
- W SAP GUI wpisz kod transakcji SPRO.
- Kliknij SAP Reference IMG (SAP Reference IMG).
- Kliknij ABAP SDK for Google Cloud > Ustawienia podstawowe > Skonfiguruj klucz klienta.
- Wpisz w polach te wartości: Pozostaw wszystkie pozostałe pola puste.
Pole | Wartość |
Nazwa klucza Google Cloud | PUBSUB_SUBSCRIBER |
Nazwa konta usługi Google Cloud | abap-sdk-pubsub-subscriber@abap-sdk-poc.iam.gserviceaccount.com |
Zakres Google Cloud | https://www.googleapis.com/auth/cloud-platform |
Identyfikator projektu | abap-sdk-poc |
Klasa autoryzacji | /GOOG/CL_AUTH_GOOGLE |
8. Tworzenie raportu ABAP do odbierania wiadomości z Google Cloud Pub/Sub
- Zaloguj się w systemie SAP.
- Przejdź do kodu transakcji
SE38
i utwórz program raportowania o nazwieZDEMO_RECEIVE_CPS_EVENTS.
. - W wyświetlonym okienku podaj szczegóły zgodnie z poniższymi instrukcjami i kliknij Zapisz.
- W następnym wyskakującym okienku wybierz Local Object (Obiekt lokalny) lub podaj nazwę pakietu.
- W edytorze ABAP dodaj ten kod:
REPORT zdemo_receive_cps_events. TYPES: BEGIN OF ty_event_message, event_time TYPE timestamp, event_type TYPE char30, source TYPE char30, sales_order TYPE vbeln, END OF ty_event_message. DATA: ls_input TYPE /goog/cl_pubsub_v1=>ty_026, ls_input_ack TYPE /goog/cl_pubsub_v1=>ty_001, ls_event_msg TYPE ty_event_message. TRY. "Open HTTP Connection DATA(lo_client) = NEW /goog/cl_pubsub_v1( iv_key_name = 'PUBSUB_SUBSCRIBER' ). "Populate relevant parameters " Derive project id from the client object DATA(lv_p_projects_id) = CONV string( lo_client->gv_project_id ). " Name of the subscription from where we want to pull data DATA(lv_p_subscriptions_id) = CONV string( 'PUBSUB_DEMO_SUBSCRIPTION' ). " Max number of messages that will be received in 1 API call ls_input-max_messages = 1. "Call API method: pubsub.projects.subscriptions.pull lo_client->pull_subscriptions( EXPORTING iv_p_projects_id = lv_p_projects_id iv_p_subscriptions_id = lv_p_subscriptions_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 ). DATA(ls_received_msg) = VALUE #( ls_output-received_messages[ 1 ] OPTIONAL ). IF ls_received_msg IS NOT INITIAL. "Messages published to Pub/Sub should be base-64 encoded, hence in order to get the exact message, we need to decode the data field. "However, attributes published to Pub/Sub should be accessible as data references. DATA(lv_msg) = |{ cl_http_utility=>decode_base64( encoded = ls_received_msg-message-data ) }|. /ui2/cl_json=>deserialize( EXPORTING json = lv_msg pretty_name = /ui2/cl_json=>pretty_mode-extended CHANGING data = ls_event_msg ). cl_demo_output=>new( )->begin_section( |Receive Events from Cloud Pubsub using ABAP SDK for Google Cloud| )->write_text( |The below event was successfully received with message ID { ls_received_msg-message-MESSAGE_ID }| )->write_data( ls_event_msg )->end_section( )->display( ). ls_input_ack-ack_ids = VALUE #( ( ls_received_msg-ack_id ) ). "Call API method: pubsub.projects.subscriptions.acknowledge "Acknowledge the messages so it is not pulled again. lo_client->acknowledge_subscriptions( EXPORTING iv_p_projects_id = lv_p_projects_id iv_p_subscriptions_id = lv_p_subscriptions_id is_input = ls_input_ack IMPORTING es_output = DATA(ls_output_ack) ev_ret_code = lv_ret_code ev_err_text = lv_err_text es_err_resp = ls_err_resp ). IF lo_client->is_success( lv_ret_code ). MESSAGE lv_msg TYPE 'S'. ELSE. MESSAGE lv_err_text TYPE 'E'. ENDIF. ELSE. MESSAGE 'No Messages were received!' TYPE 'S'. ENDIF. 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'. ENDTRY.
- Zapisz i aktywuj raport.
- Wykonaj raport (F8).
Po pomyślnym wykonaniu powinien wyświetlić się raport podobny do tego:
9. Wyjaśnienie kodu subskrybenta Pub/Sub w ABAP
Ten program ABAP integruje się z Google Cloud Pub/Sub jako subskrybent wiadomości. Sprawdza ona na żądanie, czy w określonej subskrypcji są nowe wiadomości, przetwarza je, a następnie potwierdza ich odbiór, aby zapobiec ponownemu dostarczeniu w przyszłości.
Program wykona te działania:
Szczegółowa analiza
Nawiązywanie połączenia:
- Nawiązuje połączenie HTTP z usługą Google Cloud Pub/Sub za pomocą klasy
/GOOG/CL_PUBSUB_V1
.
Ustawianie parametrów:
- Identyfikator projektu: wyodrębnia odpowiedni identyfikator projektu, w którym znajduje się subskrypcja Pub/Sub.
- Nazwa subskrypcji: określa nazwę subskrypcji, z której mają być pobierane wiadomości (
PUBSUB_DEMO_SUBSCRIPTION
). - Limit wiadomości: ustawia maksymalną liczbę wiadomości do pobrania w jednym wywołaniu interfejsu API (w tym przypadku 1).
Pobieranie wiadomości:
- Wywołuje metodę
pull_subscriptions
, aby pobrać wiadomości z określonej subskrypcji.
Przetwarzanie otrzymanych wiadomości:
- Jeśli wiadomości istnieją, program dekoduje dane, rejestruje treść i wysyła potwierdzenie.
Potwierdzanie wiadomości:
- Wywołuje metodę
acknowledge_subscriptions
, aby wysłać do Pub/Sub potwierdzenie, że wiadomości zostały odebrane. Zapobiega to ponownemu dostarczeniu.
Obsługa sukcesu/błędów:
- Wyświetla komunikaty o powodzeniu, jeśli wiadomości zostaną odebrane i potwierdzone, oraz komunikaty o błędach w różnych scenariuszach niepowodzenia (brak odebranych wiadomości, błędy interfejsu API itp.).
Zamknij połączenie:
- Zamyka połączenie HTTP z usługą Pub/Sub.
10. Gratulacje
Świetnie, że udało Ci się ukończyć Codelab „Odbieranie zdarzenia z Cloud Pub/Sub za pomocą pakietu ABAP SDK for Google Cloud”!
Udało Ci się utworzyć pomost między ABAP a Google Cloud Pub/Sub. Ukończenie tego laboratorium pokazuje, że dobrze rozumiesz przesyłanie wiadomości oparte na zdarzeniach i wiesz, jak używać pakietu ABAP SDK for Google Cloud do integracji z usługami Google Cloud. Brawo!
Osiągnięto nowy poziom integracji między ABAP a usługami Google Cloud. Poszerz swoje horyzonty dzięki tym ciekawym opcjom:
- Korzystanie z interfejsu Translation API za pomocą pakietu ABAP SDK for Google Cloud
- Przesyłanie dużego obiektu do zasobnika Cloud Storage przy użyciu dzielenia na części
- Pobieranie danych logowania/obiektów tajnych z usługi Secret Manager za pomocą pakietu ABAP SDK for Google Cloud
- Wywoływanie funkcji test-bison w Vertex AI z ABAP
- Wywoływanie BigQuery ML z ABAP
11. Czyszczenie danych
Jeśli nie chcesz kontynuować pracy z dodatkowymi ćwiczeniami dotyczącymi pakietu ABAP SDK do Google Cloud, przejdź do sekcji czyszczenia.
Usuwanie projektu
- Usuń projekt Google Cloud:
gcloud projects delete abap-sdk-poc
Usuwanie poszczególnych zasobów
- Usuń instancję obliczeniową:
gcloud compute instances delete abap-trial-docker
- Usuń reguły zapory sieciowej:
gcloud compute firewall-rules delete sapmachine
- Usuń konto usługi:
gcloud iam service-accounts delete \
abap-sdk-pubsub-subscriber@abap-sdk-poc.iam.gserviceaccount.com