Orbito - Dokumentacja modułówOrbito - Dokumentacja modułów
Wprowadzenie
Pierwsze kroki
API
Komunikacja
Widoki
Wdrożenie
Społeczność
For AI agents
Wprowadzenie
Pierwsze kroki
API
Komunikacja
Widoki
Wdrożenie
Społeczność
For AI agents
  • API biblioteki

    • API biblioteki @orbito/api-lib
    • Core
    • Log
    • Utils
    • Pages
    • Automation
    • DB
    • Config
    • Files
    • Problems
    • History
    • OAuth
    • Time
    • Mail
    • Templates
    • Lock
    • Uprawnienia

Lock

Moduł Lock zapewnia dostęp do mechanizmu rozproszonego blokowania (distributed locking) zarządzanego przez platformę Orbito. Pozwala na upewnienie się, że konkretna operacja jest wykonywana tylko raz, nawet gdy równolegle działa wiele procesów modułu.

const { Core } = require('@orbito/api-lib');

Zasięg blokady

lockId jest surowy i musi być unikalny wyłącznie w obrębie Twojej instalacji modułu — platforma sama prefiksuje go identyfikatorem instancji. Nie doklejaj do niego companyId ani instanceId: blokady nigdy nie kolidują z innymi firmami ani z innymi instalacjami tego samego modułu (np. dwa sklepy mogą równolegle trzymać blokadę order:process:123).

getLock

Uzyskuje rozproszoną blokadę, która zapewnia, że określona operacja jest wykonywana tylko raz, nawet gdy równolegle działa wiele procesów modułu. Zwraca null, jeśli blokada jest już zajęta.

const lockId = await Core.getLock(lockId, ttl);
ParametrTypOpis
lockIdstringUnikalny identyfikator blokady (np. "order:process:123")
ttlnumberCzas życia blokady w milisekundach po którym blokada automatycznie wygasa
const lockId = await Core.getLock("order:process:123", 5000);
if (!lockId) return; // ktoś inny już obsługuje to zamówienie
try {
    // sekcja krytyczna – wykonywana przez jeden proces jednocześnie
} finally {
    await Core.releaseLock(lockId);
}

extendLockTime

Przedłuża czas życia już nabytej blokady. Używaj tego do zapobiegania wygaśnięciu blokady podczas długotrwałej operacji bez wcześniejszego jej zwalniania.

await Core.extendLockTime(lockId, ttl);
ParametrTypOpis
lockIdstringIdentyfikator blokady do przedłużenia (taki sam jak zwrócony przez getLock)
ttlnumberNowy czas życia w milisekundach od momentu przedłużenia
await Core.extendLockTime("order:process:123", 5000);

releaseLock

Zwalnia wcześniej nabytą blokadę, umożliwiając jej uzyskanie kolejnemu procesowi. Zawsze powinno być wywoływane po zakończeniu sekcji krytycznej (idealnie w bloku finally).

await Core.releaseLock(lockId);
ParametrTypOpis
lockIdstringIdentyfikator blokady do zwolnienia (taki sam jak zwrócony przez getLock)
await Core.releaseLock("order:process:123");

Zasada działania

Mechanizm blokady działa na zasadzie unikalnego identyfikatora (lockId) i czasu życia (ttl). Jeśli proces próbuje uzyskać blokadę, która już istnieje i nie wygasła, otrzymuje wartość null. Po zakończeniu operacji blokada musi zostać zwolniona, aby pozostałe procesy mogły kontynuować pracę.

Niebezpieczeństwo zakleszczenia

Upewnij się, że zawsze wywołujesz releaseLock w bloku finally, nawet jeśli operacja zakończy się błędem. W przeciwnym razie blokada może zostać zablokowana na zawsze.

Ostatnio zaktualizowano:: 29.07.2026, 09:25
Contributors: Wiktor Koźmiński
Prev
Templates
Next
Uprawnienia