1. Wprowadzenie
Ten warsztat programistyczny poprowadzi Cię przez proces otrzymywania szczegółów zdarzeń z tematu Google Cloud Pub/Sub za pomocą pakietu ABAP SDK for Google Cloud. Wykorzystamy te usługi Google Cloud:
- Cloud Pub/Sub
- Cloud Shell
Wymagania wstępne
- Upewnij się, że masz dostęp do systemu SAP z zainstalowanym ABAP SDK for Google Cloud.
- Aby skonfigurować nowy system, możesz skorzystać z treningu kodowania „Install ABAP Platform Trial on Google Cloud Platform and Install ABAP SDK”.
- W ramach Codelab „Wysyłanie zdarzeń z SAP do Pub/Sub za pomocą ABAP SDK” w swoim projekcie Google Cloud utworzysz temat
PUBSUB_DEMO_TOPIC
. Jeśli nie zostały utworzone, użyj tego polecenia, aby je utworzyć:
gcloud pubsub topics create PUBSUB_DEMO_TOPIC
Co utworzysz
Utwórz:
- 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, takie jak Chrome czy Firefox;
- Projekt Google Cloud z włączonymi płatnościami lub utwórz konto na 90-dniowy okres próbny w Google Cloud Platform.
- interfejs graficzny SAP (wersja na system Windows lub Java) zainstalowany w systemie; Jeśli interfejs 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 używasz komputera Mac, możesz też zainstalować interfejs SAP dla Javy, który jest dostępny pod tym linkiem.
3. Zanim zaczniesz
- W konsoli Google Cloud na stronie selektora projektu wybierz lub utwórz projekt Google Cloud (na przykład
abap-sdk-poc
). - Sprawdź, czy w projekcie Cloud są włączone płatności. Dowiedz się, jak sprawdzić, czy w projekcie są włączone płatności. Pomiń ten krok, jeśli korzystasz z konta w ramach 90-dniowego okresu próbnego.
- Użyjesz Cloud Shell, czyli środowiska wiersza poleceń działającego w Google Cloud. W Cloud Console w prawym górnym rogu kliknij Aktywuj Cloud Shell:
- Uruchom te polecenia, aby uwierzytelnić swoje konto i ustawić projekt domyślny jako
abap-sdk-poc
. W tym przykładzie użyto strefyus-west4-b
. W razie potrzeby zmień projekt i strefę w poniższych 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 Codelab „Wysyłanie zdarzenia do Pub/Sub” musisz mieć już włączone interfejs API pub/sub, utworzyć temat i opublikować wiadomości w Pub/Sub.
4. Tworzenie konta usługi na potrzeby dostępu do Pub/Sub
Korzystanie z konta usługi z rolą Subscriber
to najbezpieczniejszy sposób, aby program ABAP otrzymywał wiadomości z Pub/Sub. Ta rola ogranicza uprawnienia tylko do pobierania wiadomości, co zapobiega potencjalnym luk 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 poprzednim 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 miejscem zastępczym dla projektu Google Cloud. Zastąp abap-sdk-poc
identyfikatorem projektu.
- Aby sprawdzić, czy dodano rolę, otwórz stronę IAM. Utworzone konto usługi powinno być wymienione wraz z przypisaną do niego rolą.
5. Subskrypcje typu pull
W przypadku subskrypcji typu „pull” system SAP działa jako klient subskrybenta i inicjuje żądania do serwera Pub/Sub, aby pobrać wiadomości. Klient subskrybenta używa interfejsu REST Pull API.
Najważniejsze metody interfejsu API
Google Cloud Pub/Sub API
- pull: inicjuje żądanie pobierania wiadomości.
- acknowledge: sygnalizuje Pub/Sub, że wiadomość została pomyślnie przetworzona.
Pakiet ABAP SDK dla Google Cloud Equivalents
- /GOOG/CL_PUBSUB_V1 -> PULL_SUBSCRIPTIONS
- /GOOG/CL_PUBSUB_V1 -> ACKNOWLEDGE_SUBSCRIPTIONS
Przepływ wiadomości w przypadku subskrypcji pull
Poniższy obraz przedstawia przepływ pracy między klientem subskrybenta a subskrypcją typu „pull”.
- Żądanie pull: system SAP (subskrybent) używa metody pull do żądania wiadomości od serwera Pub/Sub.
- Odpowiedź metody pull: serwer Pub/Sub odpowiada z 0 lub większą liczbą wiadomości i identyfikatorów potwierdzenia. Odpowiedź z zerową liczbą wiadomości lub z błędem niekoniecznie oznacza, że nie ma żadnych wiadomości do odebrania. Ta odpowiedź to odpowiedź 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 z tematuPUBSUB_DEMO_TOPIC
, uruchom to polecenie gcloud:
gcloud pubsub subscriptions create PUBSUB_DEMO_SUBSCRIPTION \
--topic=PUBSUB_DEMO_TOPIC
Publikowanie wiadomości
Aby wysłać wiadomość do PUBSUB_DEMO_TOPIC
, wybierz jedną z tych metod:
- Ponowne użycie programu: jeśli masz program z poprzedniego Codelab , którego chcesz użyć do opublikowania, użyj go.
- Publikowanie bezpośrednie: aby szybko przetestować tę funkcję, wypróbuj jedną z tych opcji:
- Cloud Console: publikowanie bezpośrednio w Google Cloud Console. 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
Ponieważ masz już skonfigurowane wymagania wstępne 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 używa tabel /GOOG/CLIENT_KEY
i /GOOG/SERVIC_MAP.
.
Aby zachować konfigurację w tabeli /GOOG/CLIENT_KEY
, wykonaj te czynności:
- W interfejsie graficznym SAP wpisz kod transakcji SPRO.
- Kliknij SAP Reference IMG (Referencyjny obraz SAP).
- Kliknij ABAP SDK for Google Cloud > Ustawienia podstawowe > Skonfiguruj klucz klienta.
- Zachowaj te wartości w polach. 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.
- Otwórz kod transakcji
SE38
i utwórz program raportowania o nazwieZDEMO_RECEIVE_CPS_EVENTS.
. - W wyświetlonym okienku podaj informacje widoczne poniżej i kliknij Zapisz.
- W wyskakującym okienku wybierz 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 powinieneś zobaczyć dane wyjściowe raportu, jak pokazano poniżej:
9. Omówienie kodu subskrybenta ABAP Pub/Sub
Zasadniczo ten program ABAP integruje się z Google Cloud Pub/Sub jako subskrybent wiadomości. Sprawdza ona określoną subskrypcję pod kątem nowych wiadomości na żądanie, przetwarza je, a następnie potwierdza ich odbiór, aby zapobiec ich ponownemu wysyłaniu.
Program będzie wykonywać te czynności:
Szczegółowy opis
Ustal połączenie:
- Nawiązuje ono połączenie HTTP z usługą Google Cloud Pub/Sub za pomocą klasy
/GOOG/CL_PUBSUB_V1
.
Ustaw parametry:
- 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: określa maksymalną liczbę wiadomości do pobrania w pojedynczym 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 są, program dekoduje dane, rejestruje zawartość i wysyła potwierdzenie.
Potwierdzanie wiadomości:
- Wywołuje metodę
acknowledge_subscriptions
, aby wysłać do Pub/Sub potwierdzenie odbioru wiadomości. Zapobiega to ich ponownemu dostarczeniu.
Obsługa sukcesu i błędów:
- wyświetla komunikaty o udanych operacjach, jeśli wiadomości zostały odebrane i potwierdzone, oraz komunikaty o błędach w różnych scenariuszach niepowodzenia (brak wiadomości, błędy interfejsu API itp.).
Close Connection:
- Zamyka połączenie HTTP z usługą Pub/Sub.
10. Gratulacje
Gratulacje! Ukończyłeś/ukończyłas ćwiczenie Codelab „Odbieranie zdarzenia z Cloud Pub/Sub za pomocą ABAP SDK for Google Cloud”.
Udało Ci się połączyć ABAP z Google Cloud Pub/Sub. Ukończenie tego ćwiczenia pokazuje, że dobrze rozumiesz wiadomości sterowane zdarzeniami i wiesz, jak używać pakietu ABAP SDK for Google Cloud do integracji z usługami Google Cloud. Brawo!
Udało Ci się osiągnąć nowy poziom integracji ABAP z usługami Google Cloud. Poszerz swoje horyzonty dzięki tym ekscytującym opcjom:
- Korzystanie z interfejsu Translation API z pakietem ABAP SDK for Google Cloud
- Przesyłanie dużego obiektu do zasobnika Cloud Storage za pomocą dzielenia na części
- Pobieranie danych logowania i obiektów tajnych z usługi Secret Manager za pomocą pakietu ABAP SDK for Google Cloud
- Wywoływanie usługi Vertex AI test-bison z ABAP
- Wywoływanie BigQuery ML z ABAP
11. Czyszczenie danych
Jeśli nie chcesz kontynuować dodatkowych samouczków związanych z pakietem ABAP SDK dla Google Cloud, przejdź do 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