简介
Trigger.dev v3 是 TypeScript 的持久化执行引擎。任务可以跑任意长(没有 Lambda 15 分钟上限)、能扛重启、支持子任务、重试、队列、死信队列、实时流式推进度到 UI。适合长 agent 运行、视频/文件处理、超出 serverless 限制的 AI 生成流水线。需要 Node 20+,Bun,Deno(预览)。装机时间 5 分钟。
定义任务
// trigger/process-video.ts
import { task, logger } from "@trigger.dev/sdk/v3";
export const processVideo = task({
id: "process-video",
maxDuration: 3600, // 1 小时也行
retry: { maxAttempts: 3 },
run: async ({ videoUrl }: { videoUrl: string }) => {
logger.info("Downloading", { url: videoUrl });
const local = await downloadVideo(videoUrl);
logger.info("Transcoding");
const transcoded = await transcode(local);
logger.info("Uploading");
const uploadedUrl = await uploadToS3(transcoded);
return { url: uploadedUrl };
},
});从你的应用触发
import { tasks } from "@trigger.dev/sdk/v3";
import type { processVideo } from "@/trigger/process-video";
const handle = await tasks.trigger<typeof processVideo>(
"process-video",
{ videoUrl: "https://example.com/clip.mp4" },
);
return Response.json({ runId: handle.id });把进度流给 UI
// React 组件
import { useRealtimeRun } from "@trigger.dev/react-hooks";
const { run, error } = useRealtimeRun(runId, { accessToken: publicToken });
return <Progress percent={run?.metadata?.percent ?? 0} status={run?.status} />;子任务并行
const transcribeVideo = task({
id: "transcribe-video",
run: async ({ videoUrl }) => {
const chunks = await splitVideo(videoUrl);
const transcripts = await Promise.all(
chunks.map((chunk) =>
transcribeChunk.triggerAndWait({ chunk }))
);
return mergeTranscripts(transcripts.map(r => r.output));
},
});子任务在 Trigger 基础设施上并行跑,父任务等待所有返回再继续。
FAQ
Q: Trigger.dev 免费吗? A: 免费 —— Apache 2.0 开源。自己用 Postgres + Docker 跑免费。Trigger.dev Cloud 有免费档(5K 次/月)和付费档(更高并发、更长保留)。
Q: 跟 Inngest 啥区别? A: 都是持久执行平台。Trigger.dev TypeScript 优先,跟 React/Next.js 集成更深(realtime hook)。Inngest 跨 TS + Python,事件驱动原语。按生态适配选。
Q: 任务跑到一半服务器挂了怎么办? A: Trigger.dev 会 checkpoint 状态。重启后任务从最后一个完成 step 继续。长运行操作(下载、AI 生成)能扛部署和崩溃。