Workflows 现在在重试时支持延迟函数
通过 Workflows,您可以为每个步骤配置内置的重试行为。以前,您可以配置具有固定延迟时长(例如秒、分钟或小时)的步骤重试,以及诸如 constant、linear 或 exponential 之类的退避策略。
步骤重试现在支持动态延迟函数。您无需仅选择基本延迟和退避策略,而是可以向 retries.delay 传递一个函数,并根据失败的尝试和抛出的错误计算下一次延迟。
当重试需要取决于故障类型时,这非常有用。您的 Workflow 可能需要在遇到速率限制错误后等待更长时间,但在发生短暂的网络故障后能更快地进行重试。如果下游 API 在其错误消息中返回了 Retry-After 值,延迟函数也可以适应提供商的指导。
await step.do(
"sync customer",
{
retries: {
limit: 5,
delay: ({ ctx, error }) => {
if (error.message.includes("rate limit")) {
return `${ctx.attempt * 30} seconds`;
}
return "10 seconds";
},
},
},
async () => {
await syncCustomer();
},
);await step.do(
"sync customer",
{
retries: {
limit: 5,
delay: ({ ctx, error }) => {
if (error.message.includes("rate limit")) {
return `${ctx.attempt * 30} seconds`;
}
return "10 seconds";
},
},
},
async () => {
await syncCustomer();
},
);动态延迟函数可以返回一个持续时间字符串、一个数字或一个解析为持续时间的 Promise。使用它们可以添加自适应重试行为,而无需编写单独的队列或调度逻辑。有关更多信息,请参阅休眠和重试。