Komunikacja między modułami
Moduły w Orbito są od siebie fizycznie odizolowane – każdy działa w osobnym kontenerze Docker i nie ma bezpośredniego dostępu do kodu ani pamięci innego modułu. Cała komunikacja między modułami przechodzi przez serwer Orbito, który pełni rolę brokera.
Platforma oferuje dwa uzupełniające się mechanizmy komunikacji.
Dwa modele komunikacji
Core.callModule – wywołanie bezpośrednie
Wywołanie konkretnej metody w konkretnym module. Wywołujący zna identyfikator docelowego modułu i czeka na wynik.
const result = await Core.callModule('core/orders', 'status.search', { orderId });
Użyteczne gdy:
- wywołujący potrzebuje danych od konkretnego modułu,
- zależność między modułami jest świadoma i celowa,
- potrzebna jest odpowiedź synchroniczna.
Hooki – wywołanie rozgłoszeniowe
Platforma wywołuje wszystkie moduły, które zarejestrowały obsługę danego zdarzenia. Wywołujący nie wie (i nie musi wiedzieć), które moduły odpowiedzą.
// Wywołanie – moduł core/orders pyta o dostępnych przewoźników
const carriers = await Core.execHook('core.shipping.getCarrier', { order });
// Obsługa – moduł integracji z DPD odpowiada na hook
Core.registerHook('core.shipping.getCarrier', async ({ order }) => {
return { carrierId: 'dpd', label: 'DPD', price: 9.99 };
});
Kontekst firmy
Oba mechanizmy działają wyłącznie w obrębie jednej firmy i nie przyjmują companyId – platforma ustala go z tożsamości połączenia. Odbiorca wie, która instalacja modułu go wywołała (ctx.caller w metodach, this.caller w hookach), a gdy firma ma kilka instalacji modułu docelowego, wywołanie adresuje się po instanceId przez Core.callInstanceMethod. Szczegóły w Kontekst firmy i instancji.
Użyteczne gdy:
- rdzeń systemu chce zebrać dane od wszystkich zainstalowanych integracji,
- liczba modułów odpowiadających nie jest z góry znana,
- chcesz umożliwić rozszerzanie zachowania systemu bez modyfikacji istniejących modułów.
Kiedy użyć callModule, a kiedy hooków?
| Sytuacja | Mechanizm |
|---|---|
Potrzebujesz danych od konkretnego modułu (np. szczegóły zamówienia z core/orders) | Core.callModule |
| Ogłaszasz zdarzenie i zbierasz odpowiedzi od dostępnych integracji | Hooki |
| Chcesz wywołać akcję w wielu modułach jednocześnie (np. powiadomienie o nowym zamówieniu) | Hooki |
| Implementujesz integrację z zewnętrznym serwisem i chcesz udostępnić ją innym modułom | Hooki (registerHook) |
| Jeden moduł jest wyraźną zależnością drugiego (np. moduł faktury korzysta z modułu klientów) | Core.callModule |
