کاری که چند مرحله دارد، تا آخر انجام میشود.
یک اجرا مرحله به مرحله پیش میرود و نتیجهٔ هر مرحله نگه داشته میشود. اگر سروری از کار بیفتد یا نسخهٔ تازهای مستقر کنید، اجرا از آخرین مرحلهٔ انجامشده ادامه میدهد و مرحلهٔ انجامشده دوباره اجرا نمیشود.
آنچه میگیرید
در کد فانکشن خودتان
فانکشن workflow(event, step, env, ctx) را export میکند و هر مرحله را با step.do مینویسد. سرور، صف یا جدولی برای نگهداشتن وضعیت اجرا لازم نیست.
تلاش دوباره برای هر مرحله
مرحلهای که خطا بدهد جداگانه دوباره اجرا میشود، با فاصلهٔ فزاینده و مهلت زمانی. خطایی را که تلاش دوباره فایده ندارد با NonRetryableError مشخص کنید.
انتظار تا چند ماه
step.sleep و step.sleepUntil اجرا را تا زمانی که میگویید نگه میدارند، از چند ثانیه تا چند ماه. در این مدت چیزی اجرا نمیشود و هزینهای ندارد.
منتظر یک رویداد
step.waitForEvent اجرا را تا رسیدن رویدادی از یک نوع نگه میدارد، با مهلتی که تعیین میکنید. رویدادی که زودتر برسد برای همان مرحله نگه داشته میشود.
گفتوگو با اجرای در حال انجام
به اجرایی که در جریان است پیام بفرستید، وضعیتش را بپرسید یا دادهاش را عوض کنید. اجرا را دستی یا با رسیدن یک رویداد لغو کنید.
مراحل موازی و اجرای فرزند
چند مرحله را با هم اجرا کنید و منتظر همه بمانید، بر اساس نتیجهٔ یک مرحله راه بعدی را انتخاب کنید، یا از یک اجرا ورکفلوی دیگری را شروع کنید.
برگرداندن کار انجامشده
اگر مرحلهای در میانه شکست بخورد، مراحل جبرانی کار مراحل قبل را برمیگردانند، مثل پس دادن مبلغی که گرفته شد. اجرایی که روی خطا متوقف شده، پس از رفع مشکل از همانجا ادامه میدهد.
همزمانی و سرعت
سقف اجرای همزمان برای هر کلید، محدودیت سرعت، دسته کردن رویدادهای پشتسرهم، اولویت، و فقط یک اجرا در هر لحظه برای یک کلید، مثلاً یک مشتری.
شروع از هر جا
اجرا را از API، خط فرمان، MCP یا داشبورد شروع کنید، یا بگذارید یک رویداد، یک زمانبندی cron، یک درخواست HTTP یا پیامی از صف آن را شروع کند.
شروع یکتا
شروع دوباره با همان شناسهٔ یکتا همان اجرا را برمیگرداند و اجرای تازهای نمیسازد. هر مرحله هم شناسهٔ یکتای خودش را میگیرد تا کار بیرونیاش دو بار انجام نشود.
هر اجرا با نسخهٔ خودش
اجرایی که شروع شده با همان نسخهای از کد تمام میشود که با آن شروع کرد، حتی اگر در میانهٔ کار نسخهٔ تازهای مستقر کنید.
تاریخچهٔ هر اجرا
فهرست اجراها با وضعیت هر کدام، و برای هر اجرا تاریخچهای از مراحل با ورودی، خروجی، تلاشها و خطاها. اجرا را از مرحلهای که انتخاب میکنید دوباره اجرا کنید.
چند مرحله، یک فانکشن
هر مرحله یک نام دارد و نتیجهاش نگه داشته میشود. اجرا یک ساعت میخوابد، تا یک هفته منتظر تایید میماند و بعد ادامه میدهد.
export default {
async workflow(event, step, env) {
const { order } = event.payload
const charge = await step.do("charge", ({ idempotencyKey }) =>
chargeCard(order, idempotencyKey))
await step.sleep("cool-off", "1h")
const approved = await step.waitForEvent("approval", { type: "approved", timeout: "7d" })
if (!approved) throw new step.NonRetryableError("not approved in time")
await step.do("ship", () => ship(order))
return { charge: charge.id }
},
}به ازای هر مرحله
هر مرحلهای که اجرا میشود شمرده میشود. زمانی که اجرا میخوابد یا منتظر رویداد است هزینهای ندارد. مصرف اول از اعتبار همان ماه و سپس از کیف پول کم میشود.
پرسشهای رایج
اجرا روی سرور دیگری از آخرین مرحلهٔ انجامشده ادامه میدهد. نتیجهٔ مراحل انجامشده خوانده میشود و آن مراحل دوباره اجرا نمیشوند.
نتیجهٔ هر مرحله دقیقاً یک بار ثبت میشود. اما اگر مرحله پیش از ثبت نتیجه قطع شود، دوباره اجرا میشود؛ برای همین هر مرحله idempotencyKey خودش را میگیرد تا آن را به سرویسی که صدا میزنید بدهید.
اجرا با نتیجههای نگهداشته از اول دوباره خوانده میشود، پس کد بیرون از مراحل باید هر بار همان کار را بکند. زمان، عدد تصادفی و هر درخواست بیرونی را داخل یک مرحله بخوانید.
اجراهایی که در جریاناند با نسخهای که با آن شروع کردند تمام میشوند. اجراهای تازه با نسخهٔ جدید شروع میشوند.
در صف هر پیام یک کار جداست. ورکفلو کاری با چند مرحله است که وضعیتش نگه داشته میشود، میتواند روزها منتظر بماند و تاریخچهٔ هر مرحلهاش دیده میشود. هر دو را میتوانید با هم به کار ببرید: پیامی از صف یک اجرا را شروع کند.
در داشبورد، تاریخچهٔ اجرا هر مرحله را با ورودی، خروجی، تلاشها و خطا نشان میدهد. همین را با cloudhost workflows history، با API یا با MCP هم میگیرید.
اولین ورکفلو را بنویسید
یک فانکشن، چند مرحله، یک دستور برای شروع.
فعلاً ثبتنام با کد دعوت است. اگر کد دارید، همین حالا حساب ایجاد کنید.
ثبتنام باکد ایمیلکد پیامکی