跳转到内容
搜索文档

更新日志

Cloudflare 的最新更新与改进。

Back to all posts

直接从 Workflow 绑定调度 Workflow 实例

您现在可以在 wrangler.jsonc 中直接将 cron 计划附加到 Workflow 绑定(binding)。每次计划运行都会自动创建一个新的 Workflow 实例,因此您无需定义单独的带有 scheduled 处理程序的 Worker 来按间隔触发您的 Workflow。

例如,您可以在同一个 Workflow 上配置每小时、每 15 分钟或工作日计划:

{
	"workflows": [
		{
			"name": "my-scheduled-workflow",
			"binding": "MY_WORKFLOW",
			"class_name": "MyScheduledWorkflow",
			"schedules": ["0 * * * *", "*/15 * * * *", "0 9 * * MON-FRI"],
		},
	],
}

Cron 工作负载获得 Workflows 的所有相同优势,包括内置重试、多步骤持久执行以及 Workflows 的可配置超时。

import {
	WorkflowEntrypoint,
	WorkflowEvent,
	WorkflowStep,
} from "cloudflare:workers";

// 根据 wrangler.jsonc 中为 MY_WORKFLOW 绑定定义的每个 cron 计划自动运行。
export class MyScheduledWorkflow extends WorkflowEntrypoint<Env> {
	async run(event: WorkflowEvent, step: WorkflowStep) {
		const data = await step.do("fetch source data", async () => {
			return await fetchSourceData();
		});

		// 如果此步骤失败,则仅使用以下自定义逻辑重试此步骤
		await step.do(
			"process and store results",
			{
				retries: { limit: 5, delay: "30 seconds", backoff: "exponential" },
				timeout: "10 minutes",
			},
			async () => {
				await processAndStore(data);
			},
		);
	}
}

这使得构建定期计划的作业(例如数据库备份、发票生成、报告聚合和清理任务)变得更加容易,而无需配置单独的 Cron Trigger 入口点。

有关更多信息,请参阅触发 Workflows