Підсумок обмежень
| Обмеження | Код workflow | Код activity |
|---|---|---|
| Введення-виведення | Заборонено | Дозволено |
| Змінні глобальні змінні | Заборонено | Дозволено |
| Недетерміновані функції | Заборонено | Дозволено |
Carbon::now() | Заборонено | Дозволено |
sleep() | Заборонено | Дозволено |
| Зовнішні побічні ефекти | Перенесіть їх до activity | Дозволено лише за безпечного повторення |
Код workflow має бути детермінованим, оскільки рушій відновлює стан workflow шляхом відтворення історії стійких кроків. Він повторно викликає тіло workflow, а не activity. Якщо тіло ухвалює інші рішення під час відтворення, рушій не може коректно відновити стан і продовжити виконання. Тіло workflow не має бути ідемпотентним. Для відтворення потрібна детермінованість.
Activity мають бути ідемпотентними, бо їх виконання відбувається щонайменше один раз. Повторні спроби, завершення оренди та повторна доставка можуть спричинити повторне спостереження тієї самої спроби. Це передбачена поведінка. Безпечне повторення тіла activity чи його зовнішнього цільового ресурсу, завдяки ключу ідемпотентності, детермінованому ресурсу чи природно ідемпотентній операції, запобігає дублюванню побічних ефектів під час повторного виконання.
Дивіться ідемпотентність та детермінованість workflow для прямого порівняння та прикладів, які розділяють ці властивості.
Публічний контракт v2 щодо цих понять наведено в гарантіях виконання та ідемпотентності.