timeoutSeconds (maximálně 900 sekund). Cokoli, co se nedokáže dokončit v tomto časovém okně — úplná resynchronizace, fan-out pro jednotlivé záznamy, služba třetí strany, která vás omezuje rychlostí — musí být rozděleno do menších běhů.
enqueueJob dělá přesně to: požádá Twenty workery, aby jednu z logických funkcí vaší aplikace spustili později, ve vlastním procesu a s vlastním časovým limitem. Volající se vrátí okamžitě.
Zařazení spuštění do fronty
ImportujteenqueueJob z twenty-sdk/logic-function a nasměrujte ho na universalIdentifier logické funkce, kterou chcete spustit.
src/logic-functions/sync-all-contacts.ts
payload jako argument svého handleru, úplně stejně jako jakýkoli jiný spouštěč. Musí patřit do stejné aplikace jako volající – zařazení funkce jiné aplikace je odmítnuto s chybou Logic function not found.
enqueueJob se vrátí, jakmile je úloha přijata, ne až když je dokončena. Nevrací výsledek cíle – nechte cíl zapsat, co vytváří, do úložiště klíč–hodnota nebo do záznamu v pracovním prostoru, pokud to potřebujete znovu přečíst.Možnosti úlohy
Prioritu zatím nelze konfigurovat. Zařazené úlohy jsou vždy spuštěny s nejnižší prioritou, takže práce platformy není nikdy zdržována úlohami aplikací. Možnost řízení priority brzy přibude.
Použití: stránkování dlouhé synchronizace
Klasický tvar je funkce, která do fronty zařazuje samu sebe s dalším kurzorem. Každé spuštění zpracuje jednu stránku práce s velkou rezervou vůči svému vlastnímu časovému limitu a řetězec se zastaví, když už nic nezbývá.src/logic-functions/sync-contacts-page.ts
Rozvětvení po záznamech
Když je práce přirozeně po položkách, zařaďte do fronty jednu úlohu na položku a nechte workery zpracovávat je paralelně místo smyčky inline.Doporučené postupy pro dlouhotrvající práci
Dvě pravidla pokryjí téměř každou dlouhou úlohu: rekurze místo smyčky a zpracování omezeného bloku na jedno spuštění. Spuštění, které se snaží udělat všechno, je způsob selhání – narazí na časový limit a při opakování začne celé znovu od nuly. Místo toho nastavte velikost jednoho bloku tak, aby se pohodlně vešel dotimeoutSeconds, uložte si svou pozici a zařaďte do fronty další spuštění.
src/logic-functions/enrich-companies-batch.ts
- Velikost bloku určete podle nejpomalejší položky, ne podle průměru.
CHUNK_SIZE × worst-case item timese musí vejít dotimeoutSecondss rezervou, jinak se konec bloku ztratí, když je spuštění utnuto. - Udělejte ukončovací podmínku explicitní. Rekurzi provádějte jen tehdy, když se vrátil plný blok. Řetězec, který se zastavuje jen na základě „žádné výsledky“, poběží donekonečna, pokud zdroj někdy uprostřed vrátí krátkou stránku.
- Uložte průběh před zařazením dalšího spuštění, takže se neúspěšný článek řetězu znovu spustí od posledního dokončeného bloku místo od začátku.
- Udržujte každý blok idempotentní. Znovuzpracování jednoho bloku po opakování nesmí vést k dvojím zápisům – své zápisy važte na záznam nebo externí ID, které zpracováváte.
- Preferujte řetězec po blocích před jedním obřím rozvětvením, když práce zasahuje třetí stranu s omezením rychlosti: řetězec s
delayMssám sebe dávkuje, zatímco tisíce úloh zařazených najednou se stanou způsobilými okamžitě.