@btravstack/amqp-worker

中文文档
0.58.0发布于 2026/11/08MITTypeScriptESM + CJS零依赖构建来源已验证近 30 天下载 7694

@btravstack/core的AMQP启动器:处理器作为端口,每次发送一个单元,以及内核截止释放的排出量

中文使用文档
文档目录5 节
  1. 实例
  2. 选项
  3. 它决定什么,它没有
  4. 许可证
  5. 广播订阅

@btravstack/amqp-工作间

这个 消费 aMQP 用于 @btravstack/core ——出版 属于 @amqp-contract/client,其中的发件箱出版商 examples/order-amqp-worker 直接使用。 一个 amqp-contract 下级工人 内核的生命周期——每交付一个单位,排出一个排出物 截止时间,内核本身.

📖 文档 • 妇女 参考文献 • 妇女 API 参考

pnpm add @btravstack/amqp-worker @btravstack/core @btravstack/config @btravstack/di unthrown \
  @amqp-contract/worker@^3.0.0-beta.12 @opentelemetry/api

所有六个都是同级依赖——安装它们(@opentelemetry/api 因为 @amqp-contract/worker 以自己的同龄人为准。 节点 >=22.22。 。 。 .

实例

import { Env } from "@btravstack/config";
import { AmqpHandlers, AmqpModule } from "@btravstack/amqp-worker";
import { runMain, Logger } from "@btravstack/core";
import { ErrAsync, OkAsync, P } from "unthrown";

// The handlers, as a service: one entry per consumer the contract declares,
// built by di from the use cases it lists — no injected context — on the
// starter's own handlers port, typed by the contract (a consumer serves one
// handlers record, so there is nothing to name).
const orderHandlers = AmqpHandlers(orderContract)({
  inject: { placeOrder: PlaceOrder },
  sync: ({ placeOrder }) => ({
    orderNotifications: ({ input: message }) =>
      placeOrder
        .execute(
          TenantId(message.payload.tenantId),
          message.payload.id,
          message.payload.payload?.quantity ?? 0,
        )
        .map(() => undefined)
        // A modeled domain error is permanent: dead-letter it, no retry.
        .mapErrCases((matcher) =>
          matcher.with(
            P.tag("InvalidQuantity"),
            P.tag("InvalidOrderId"),
            P.tag("DuplicateOrder"),
            (error) => new NonRetryableError(error._tag, error),
          ),
        )
        // Infrastructure failing is not: recover the defect into a retry.
        .recoverDefect((cause) =>
          ErrAsync(new RetryableError("placing the order failed", cause)),
        ),
    // Every consumer the contract declares must be covered — an uncovered
    // key is refused at this call, not on the first delivery.
    orderAudit: () => OkAsync(undefined),
  }),
});

const Worker = AmqpModule("Worker")({
  needs: [Env],
  contract: orderContract,
  handlers: orderHandlers,
  imports: [AppModule],
});

await runMain(Worker);

AmqpModule 导入启动器 - AmqpRuntime, (中文(简体) ), AmqpConfig 约束从 AMQP_URL (默认) amqp://127.0.0.1:5672() 提供操作员和 输出运行时端口;操作者在 打电话,不是第一次送货. runtimeInfo() 读取 { queues } 回来一次 消费.

拥有多个消费者的工人可以做几个片子,而不是一个记录: AmqpHandler(contract, key)({ inject: { name: Dep }, unit, sync }) 薄荷为一消费者或 rpc,单独由键键键键输入,以及 AmqpHandlers(contract)([...]) 组成一个 数组到相同的处理器提供者 AmqpModule 取- 数组 合同申报的每把钥匙必须覆盖,每块自己的港口必须覆盖 仍然被遣散(provides),因为构成提供者的道具是 切口,不是他们关闭的。 一个消费者属于一个切片 编译器只持有其中的一半: 检查覆盖度, 注射性不是, 所以 两个片子要求一个键型检查在一起。 这是迪的复制商 一次建造时出现缺陷 两者 块作为提供者在一个图表中排出 ——只有一根和另一条接线的接线人默默地从未注册.

一块 unit 命名其处理器已读取的端口 context.unit,解决 装入单元的每发货叉 unit.message - 这是 以已验证信件为种子 AmqpMessage(contract)单元模块 租户来自交货,而不是环境记录。 这个 上面的记录臂也一样 unit: - 记录里面的每一个条目 - 所以 一个没有超过一个功能的工人 context.unit 无 先切开. 根与所申报的: 不导出其中一个端口的模块 AmqpModule 拒绝, 命名端口.

它自己的测试套房需要一个 Docker 守护进程: 与共享相对应的规格 rabbitmq 集装箱 internal/test-infra 每台机器开始一次 工作空间再利用。 这里没有别的事.

选项

AmqpModule(name)({...}) 选择启动者的选项+ handlers 编辑 模块列表imports, (中文(简体) ), provides, (中文(简体) ), exports, (中文(简体) ), needs) (中文(简体) ). 这是唯一的办法 组成启动器, 不导出 :

选项这是什么
contract页:1 amqp-contract 合同; 所消耗的队列会被读取
handlers处理器提供者——什么 AmqpHandlers(contract)(...) 本合同的返回
url针头 AMQP_URL (默认) amqp://127.0.0.1:5672)——试验容器
connectionOptionsAmqpConnectionOptions,库本身的连接调子:心跳,重接间隔, findServers, TLS 数据
defaultConsumerOptions图书馆的 ConsumerOptions,适用于每个处理器: prefetch (通量指针——未设置是) 10, (中文(简体) ), "unbounded" 不是盖子, priority,, , , , , , , ,
connectTimeoutMs针头 AMQP_CONNECT_TIMEOUT_MS - 启动要等多久才能找到无法接触的经纪人 RuntimeStartFailed (默认) 5000(中文(简体) )
unit{ message } ——每交付一次工人叉子的模块,以信息为种子 AmqpMessage(contract)

完整的表格——需要/可选的、默认的和推理的——继续存在 参考页, (中文(简体) ), 这张名单是详细的.

它决定什么,它没有

Result ~ ack / 重试 / dead- letter is a 三进制 分开,没有它 这个包是: a RetryableError 编号 : NonRetryableError 路由为 amqp-contract'自己发送到队列' retry 配置,和 a Defect 被裸体一次,直接到死字队列, 永远不要碰那个 预算——这就是为什么上面的操作者将自己的缺陷恢复到一个 RetryableError。排水管呼唤 worker.close({ drainTimeoutMs: null }) 与内核的最后期限相竞争: 告诉库永远等待, 所以 在这个过程中没有第二次暂停,以保持步调。 每次送货都是一次 单位, traceId 出版社的 messageId剩下的时间是 文档网站。 。 。 .

AmqpModule 自动公开导出 Logger 财务报告和审定财务报表 HealthChecks 端口,包括整个模块再出口和在根上申报的供应商. 它使私人基础设施隐蔽,商业出口明确.

许可证

麻省理工学院 贝诺伊特旅行社

广播订阅

amqpSubscription(name, { contract, settings, inject?, sync }) 消耗量 hTTP 运行时间之外的最佳事实, 排出一个排行 每个复制品。 它报告失败和促成健康,并关闭范围. InvalidAmqpSubscription 命名一个被拒绝的配置; SubscriptionHandlers<C, E> 输入合同的处理者记录. 见 订阅参考文献 适用于打字合同、设置端口和交货担保.

版本与发布记录

@btravstack/amqp-worker 共发布 62 个版本,首次发布于 2026/08/26;过去 12 个月发布了 62 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.58.0latest2026/11/08今天
0.57.02026/11/071 天前
0.56.12026/11/062 天前
0.56.02026/11/062 天前
0.55.12026/11/035 天前
0.55.02026/11/035 天前

关于 @btravstack/amqp-worker 的常见问题

@btravstack/amqp-worker 是什么?

@btravstack/core的AMQP启动器:处理器作为端口,每次发送一个单元,以及内核截止释放的排出量

如何安装 @btravstack/amqp-worker?

在项目目录运行 npm install @btravstack/amqp-worker,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:unthrown(^5.11.0)、@btravstack/di(^0.58.0)、@btravstack/core(^0.58.0)、@btravstack/config(^0.58.0)、@opentelemetry/api(^1)、@amqp-contract/worker(^3.0.0-beta.12)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@btravstack/amqp-worker 支持 TypeScript 吗?

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

@btravstack/amqp-worker 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@btravstack/amqp-worker 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=22.22。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@btravstack/amqp-worker 可以商用吗?

@btravstack/amqp-worker 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@btravstack/amqp-worker 的下载量有多少?

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

@btravstack/amqp-worker 还在维护吗?

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