Przejdź do treści

Tryb rozgłoszeniowy (zdarzenia)

Tryb rozgłoszeniowy odwraca kierunek inicjatywy względem trybu żądaniowego: to system dziedzinowy zgłasza zdarzenie (utworzenie, zmiana, usunięcie zasobu), a API.ERP natychmiast eksportuje pełną zawartość powstałego/zmienionego zasobu do repozytorium integratora — bez konieczności cyklicznego odpytywania API.

Tryb rozgłoszeniowy działa naprzemiennie z trybem notyfikacyjnym — dla danego zasobu obowiązuje zawsze tylko jeden z nich, ustalony w ramach integracji.

Charakterystyka

  • Obsługa zdarzeń w systemach dziedzinowych — setki zdarzeń (księgowość, magazyn, kadry, majątek) mogą powodować eksport zasobu.
  • Pełna zawartość zasobu — do repozytorium integratora trafia kompletny, przekonwertowany model kanoniczny (np. Party, Invoice), bez potrzeby dodatkowego zapytania zwrotnego.
  • Natychmiastowy przepływ informacji po wystąpieniu zdarzenia w systemie źródłowym.

Przepływ informacji

Celem eksportu jest magazyn docelowy integratora (magazyn obiektowy, endpoint HTTP albo katalog w systemie plików) — API.ERP zapisuje tam każdy zasób, a integrator odczytuje dane we własnym zakresie (asynchronicznie). Poniżej wariant z magazynem obiektowym.

flowchart RL
    D1["FK"]:::domain --> A["API.ERP"]:::api
    D2["WMS"]:::domain --> A
    D3["HR"]:::domain --> A
    A -- "zasób — zapis obiektu" --> B["Magazyn obiektowy"]:::repo
    B -. "odczyt (integrator)" .-> I["Aplikacja integratora"]:::integrator

    classDef integrator fill:#8BC34A,stroke:#558B2F,color:#000
    classDef api fill:#03A9F4,stroke:#0277BD,color:#000
    classDef domain fill:#FFA000,stroke:#E65100,color:#000
    classDef repo fill:#FFFFFF,stroke:#333,color:#000

Sekwencja przetworzenia jednego zdarzenia:

sequenceDiagram
    participant D as Systemy dziedzinowe (księgowość / magazyn / kadry / majątek)
    participant A as API.ERP
    participant R as Magazyn obiektowy (integratora)

    D->>A: Zdarzenie (utworzenie / zmiana / usunięcie zasobu)
    A->>A: Konwersja do modelu kanonicznego
    A->>R: Zapis obiektu (zasób)
    Note over R: integrator odczytuje asynchronicznie

Szczegóły: Repozytorium danych.

Repozytorium danych

Tryb rozgłoszeniowy dostarcza do celu ustalanego w ramach integracji: magazyn obiektowy (storage.type: blob), endpoint HTTP (http, POST zasobu) albo katalog w systemie plików (local). Wspólny model celu, pola połączenia i uprawnienia opisano w Cel dostarczenia (storage.type). W wariancie magazynu obiektowego API.ERP zapisuje każdy zasób jako obiekt JSON w kontenerze integratora; integrator odczytuje go we własnym zakresie (asynchronicznie).

  • Nazwa obiektu: {resourceType}/{id}_{znacznik-czasu}.json.

Zgodność z eksportem API.ERP

Zapisany obiekt to model kanoniczny serializowany camelCase, z polem resourceType identyfikującym rodzaj zasobu (zgodnie z DomainResource). Dla akcji create/update zapisywany jest pełny zasób; dla delete — ponieważ zasób źródłowy już nie istnieje — eksportowane są metadane elementu kolejki (typ zasobu, identyfikator, akcja, czas), a format docelowy tego komunikatu nie jest jeszcze ustalony. W trybie notyfikacyjnym wszystkie operacje, w tym deleted, są przenoszone jako Notification.

Potwierdzenie odbioru

Brak potwierdzenia zwrotnego — dostarczenie jest uznane po udanym zapisie obiektu do magazynu lub katalogu albo po odpowiedzi 2xx endpointu HTTP. Integrator konsumuje obiekty asynchronicznie we własnym zakresie (np. nasłuch zdarzeń magazynu lub cykliczny odczyt).

Ponawianie, martwa kolejka (dead-letter), idempotencja (rozróżnianie duplikatów po id) i brak gwarancji kolejności są wspólne dla trybów wychodzących — zob. Cel dostarczenia → Dostarczanie, ponawianie, idempotencja. Nie zakładaj, że zdarzenia przychodzą w kolejności ich wystąpienia.

Kiedy używać

Tryb rozgłoszeniowy pasuje tam, gdzie integrator potrzebuje kompletnych danych od razu, bez dodatkowego zapytania zwrotnego — np. pełna synchronizacja danych kontrahenta. Jeśli integratorowi wystarczy sama informacja o zmianie (a pełne dane pobiera na żądanie, gdy faktycznie ich potrzebuje), właściwy jest lżejszy tryb notyfikacyjny. Dla operacji inicjowanych przez integratora (zapis, zapytanie ad-hoc) właściwy jest tryb żądaniowy.

Odniesienia