序
我们总是会用到一些报表统计、活动邮件定时发送、视频处理、统计等一些耗时任务,
希望这些任务自动、静默的在夜里执行
一、安装
pnpm dlx trigger.dev@latest init
二、Tasks
常规任务
//定义 import { task } from '@trigger.dev/sdk/v3'; //paylaod:传递数据 //ctx: 上下文对象 export const Test = task({ id: '', retry: { //重试 maxAttempts: 3, factor: 2, }, queue: { //队列 concurrencyLimit: 1, //设置任务并发限制 }, machine: { // 配置任务所需的vCPU及RAM }, maxDuration: 5 * 60, //任务运行最长执行时间,单位秒 run: async(paylaod, { ctx }) => { }, // 任务初始化 init: async(paylaod, { ctx }) => { }, // run执行后,无论成功失败,该函数都会执行 cleanup: async(paylaod, { ctx }) => { }, // 任务运行成功时,执行 onSuccess: async(paylaod, { ctx }) => { }, // 任务运行失败时,执行 onFailure: async(paylaod, { ctx }) => { }, // run抛出错误时,执行 handleError: async(paylaod, { ctx }) => { }, })
//可以放到后端代码触发,也可以放到另一个task触发 //触发 import { Test } from './test' const resp = Test.trigger();
验证任务
比常规任务多了schema验证
import { schemaTask } from "@trigger.dev/sdk/v3"; import { z } from "zod"; const myTask = schemaTask({ id: "my-task", schema: z.object({ name: z.string(), age: z.number(), }), run: async (payload) => { console.log(payload.name, payload.age); }, });
计划任务
使用 cron 语法,重复执行任务,比常规任务多了cron配置
import { schedules } from "@trigger.dev/sdk/v3"; export const firstScheduledTask = schedules.task({ id: "first-scheduled-task", //every two hours (UTC timezone) cron: "0 */2 * * *", run: async (payload, { ctx }) => { //do something }, });
// cron 语法 * * * * * ┬ ┬ ┬ ┬ ┬ │ │ │ │ | │ │ │ │ └ day of week (0 - 7, 1L - 7L) (0 or 7 is Sun) │ │ │ └───── month (1 - 12) │ │ └────────── day of month (1 - 31, L) │ └─────────────── hour (0 - 23) └──────────────────── minute (0 - 59)
三、Triggering
单次触发
const handle = await tasks.trigger(taskId, payload, options);
批量触发, 相同任务多次执行
const batchHandle = await tasks.batchTrigger(taskId, [payload1, payload2], options);
批量触发, 不同任务批量执行
const result = await batch.trigger([ { id: task1, payload: payload1 }, { id: task2, payload: payload2 }, ]);
触发选项
//任务触发 tasks.trigger(payload,{ delay: '1h', // 延迟1小时运行 ttl: '1h', //任务生存时间,在指定时间内未运行,则过期 idempotencyKey: '', //如果一个任务被创建2次,则第二次不会执行 tags: [tag1, tag2], // 任务筛选运行 metadata: {}, //添加元数据,任务之间共享数据 })
四、Runs
task的实例,包含运行id、运行状态、payload、metadata
取消任务
await runs.cancel(runId);
重试任务
await runs.replay(runId);
五、本地开发
pnpm dlx trigger.dev@latest dev
六、部署
pnpm dlx trigger.dev@latest deploy