@convex-dev/action-retrier

中文文档
0.3.1发布于 2026/06/25Apache-2.0TypeScriptES Module零依赖近 30 天下载 121.9万

用于重试偶能动作的 Convex 组件 .

中文使用文档
文档目录8 节
  1. 预先要求: Convex
  2. 安装
  3. API 密码
  4. 开始运行
  5. 运行状态
  6. 取消运行
  7. 清理已完成的运行
  8. 日志

Convex 动作检索器

npm version

动作有时会因网络错误、服务器重启或问题而失败 加上第3个政党API,经常可以重试. 行动检索器 组件使得这真的容易.

import { ActionRetrier } from "@convex-dev/action-retrier";
import { components } from "./convex/_generated/server";

const retrier = new ActionRetrier(components.actionRetrier);

// `retrier.run` will automatically retry your action up to four times before giving up.
await retrier.run(ctx, internal.module.myAction, { arg: 123 });

反射器组件将运行动作,并在失败时重试,与 指数后退, 直至动作成功或重复的最大次数 已经到达.

预先要求: Convex

你需要一个现有的 Convex 项目来使用组件。 Convex 是一个主机 后端平台,包括数据库、无服务器功能和多一个吨 可以学习 这里。 。 。 .

运行 npm create convex 或遵循其中任何一条 快速启动 来设置一个.

安装

第一,添加 @convex-dev/action-retrier 作为国家预防机制的依赖:

npm install @convex-dev/action-retrier

然后,将组件安装到您的 Convex 工程中 convex/convex.config.ts 配置文件 :

// convex/convex.config.ts
import { defineApp } from "convex/server";
import actionRetrier from "@convex-dev/action-retrier/convex.config.js";

const app = defineApp();
app.use(actionRetrier);
export default app;

最后,创建一个新的 ActionRetrier 在您的 Convex 项目中, 并指示它 至已安装组件:

// convex/index.ts
import { ActionRetrier } from "@convex-dev/action-retrier";
import { components } from "./_generated/api";

export const retrier = new ActionRetrier(components.actionRetrier);

您可以在 ActionRetrier 建筑师.

const retrier = new ActionRetrier(components.actionRetrier, {
  initialBackoffMs: 10000,
  base: 10,
  maxFailures: 4,
});
  • initialBackoffMs 是重试前失败后的初始延迟 (默认:250).
  • base 是指数后退的基数( 默认: 2) .
  • maxFailures 是重试动作的最大次数( 默认 4) .

API 密码

开始运行

在安装组件后,使用 run 从变异或 行动启动行动.

export const kickoffExampleAction = mutation({
  handler: async (ctx) => {
    const runId = await retrier.run(ctx, internal.index.exampleAction, {
      foo: "bar",
    });
    // ... optionally persist or pass along the runId
  },
});

export const exampleAction = internalAction({
  args: { foo: v.string() },
  handler: async (ctx, args) => {
    return operationThatMightFail(args);
  },
});

返回值为 retrier.run 不是行动的结果,而是 用于查询其状态或取消其状态的ID。 动作的返回值 当它成功时,随状态一起保存.

您可以在选项中选择指定对后退参数的覆盖 参数.

export const kickoffExampleAction = action(async (ctx) => {
  const runId = await retrier.run(
    ctx,
    internal.index.exampleAction,
    { failureRate: 0.8 },
    {
      initialBackoffMs: 125,
      base: 2.71,
      maxFailures: 3,
    },
  );
});

您可以指定一个 onComplete 选项参数中的突变回调 不错 这种突变可以保证最终精确运行一次.

// convex/index.ts

import { runResultValidator, runIdValidator } from "@convex-dev/action-retrier";

export const kickoffExampleAction = action(async (ctx) => {
  const runId = await retrier.run(
    ctx,
    internal.index.exampleAction,
    { failureRate: 0.8 },
    {
      onComplete: internal.index.exampleCallback,
    },
  );
});

export const exampleCallback = internalMutation({
  args: { id: runIdValidator, result: runResultValidator },
  handler: async (ctx, args) => {
    if (args.result.type === "success") {
      console.log(
        "Action succeeded with return value:",
        args.result.returnValue,
      );
    } else if (args.result.type === "failed") {
      console.log("Action failed with error:", args.result.error);
    } else if (args.result.type === "canceled") {
      console.log("Action was canceled.");
    }
  },
});

运行状态

这个 run 方法返回 a RunId,然后可用于查询运行的 状态.

export const kickoffExampleAction = action(async (ctx) => {
  const runId = await retrier.run(ctx, internal.index.exampleAction, {
    failureRate: 0.8,
  });
  while (true) {
    const status = await retrier.status(ctx, runId);
    if (status.type === "inProgress") {
      await new Promise((resolve) => setTimeout(resolve, 1000));
      continue;
    } else {
      console.log("Run completed with result:", status.result);
      break;
    }
  }
});

取消运行

您可以使用 cancel 方法.

export const kickoffExampleAction = action(async (ctx) => {
  const runId = await retrier.run(ctx, internal.index.exampleAction, {
    failureRate: 0.8,
  });
  await new Promise((resolve) => setTimeout(resolve, 1000));
  await retrier.cancel(ctx, runId);
});

正在执行的运行将被取消, 因此可能 仍在执行。 一个成功的呼吁 cancel不过 保证以后 status 电话将表示取消.

清理已完成的运行

运行占用了数据库中的空间,因为它们存储了返回值. 之后 运行完成后,您可立即使用 retrier.cleanup(ctx, runId)。系统将自动清理完成 7天后运行.

export const kickoffExampleAction = action(async (ctx) => {
  const runId = await retrier.run(ctx, internal.index.exampleAction, {
    failureRate: 0.8,
  });
  try {
    while (true) {
      const status = await retrier.status(ctx, runId);
      if (status.type === "inProgress") {
        await new Promise((resolve) => setTimeout(resolve, 1000));
        continue;
      } else {
        console.log("Run completed with result:", status.result);
        break;
      }
    }
  } finally {
    await retrier.cleanup(ctx, runId);
  }
});

日志

你可以设置 ACTION_RETRIER_LOG_LEVEL 改为 DEBUG 拥有回溯日志 更多的内部信息,然后你可以查看 Convex 仪表板.

npx convex env set ACTION_RETRIER_LOG_LEVEL DEBUG

默认日志级别为 INFO但你也可以设置它 ERROR 对偶数 木头少.

版本与发布记录

@convex-dev/action-retrier 共发布 11 个版本,首次发布于 2024/09/20;过去 12 个月发布了 2 个版本。

版本发布日期距今
0.3.1latest2026/06/254 个月前
0.3.02025/11/1111 个月前
0.2.12025/05/311.4 年前
0.2.02025/02/191.7 年前
0.1.7-alpha.1alpha2025/02/151.7 年前
0.1.7-alpha.02025/02/151.7 年前

关于 @convex-dev/action-retrier 的常见问题

@convex-dev/action-retrier 是什么?

用于重试偶能动作的 Convex 组件 .

如何安装 @convex-dev/action-retrier?

在项目目录运行 npm install @convex-dev/action-retrier,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:convex(^1.24.8)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@convex-dev/action-retrier 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@convex-dev/action-retrier 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@convex-dev/action-retrier 可以商用吗?

@convex-dev/action-retrier 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@convex-dev/action-retrier 的下载量有多少?

根据 npm 官方下载统计,@convex-dev/action-retrier 在 2026/10/11 – 2026/11/09 这 30 天内被下载 1,218,917 次,日均约 40,631 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@convex-dev/action-retrier 还在维护吗?

最新版本 0.3.1 发布于 2026/06/25(4 个月前);至今共发布 11 个版本,其中过去 12 个月发布了 2 个;首次发布于 2024/09/20。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。