# @btravstack/amqp-worker 中文文档

规范地址：https://npmcn.com/package/%40btravstack/amqp-worker/

版本：0\.58\.0
npm 元数据更新时间：2026-11-07T21:12:14.681Z
中文译文更新时间：2026-11-08T18:07:35.385Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40btravstack/amqp-worker
原文对照：https://npmcn.com/package/%40btravstack/amqp-worker/?lang=original
项目主页：https://github.com/btravstack/btravstack#readme
源码仓库：https://github.com/btravstack/btravstack

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：98.8 kB，7 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- Node.js 要求：\>=22\.22
- 运行依赖：0 个
- 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
- 首次发布：2026-08-25T16:22:56.192Z
- 最新版本发布：2026-11-07T21:12:14.390Z
- 近 30 天下载量：7694（2026-10-09 至 2026-11-07，npm 官方下载统计）
- 已发布版本数：62（近 12 个月 62 个）

## 中文简介

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

## 安装

```sh
npm install @btravstack/amqp-worker
```

也可以使用：`pnpm add @btravstack/amqp-worker`、`yarn add @btravstack/amqp-worker`、`bun add @btravstack/amqp-worker`

## README

# @btravstack/amqp-工作间

> 这个 **消费** aMQP 用于 [`@btravstack/core`](https://npmcn.com/package/%40btravstack/core) ——出版 属于 `@amqp-contract/client`,其中的发件箱出版商 `examples/order-amqp-worker` 直接使用。 一个 [`amqp-contract`](https://github.com/btravstack/amqp-contract) 下级工人 内核的生命周期——每交付一个单位,排出一个排出物 截止时间,内核本身.

📖 **[文档](https://btravstack.github.io/btravstack/how-to/consume-amqp-messages)** • 妇女 [参考文献](https://btravstack.github.io/btravstack/reference/amqp-worker) • 妇女 [API 参考](https://btravstack.github.io/btravstack/api/amqp-worker/)

```sh
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`。 。 。 .

## 实例

```ts
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`)——试验容器 |
| `connectionOptions` | `AmqpConnectionOptions`,库本身的连接调子:心跳,重接间隔, `findServers`, TLS 数据 |
| `defaultConsumerOptions` | 图书馆的 `ConsumerOptions`,适用于每个处理器: `prefetch` (通量指针——未设置是) `10`, (中文(简体) ), `"unbounded"` 不是盖子, `priority`,, , , , , , , , |
| `connectTimeoutMs` | 针头 `AMQP_CONNECT_TIMEOUT_MS` - 启动要等多久才能找到无法接触的经纪人 `RuntimeStartFailed` (默认) `5000`(中文(简体) ) |
| `unit` | `{ message }` ——每交付一次工人叉子的模块,以信息为种子 `AmqpMessage(contract)` |

完整的表格——需要/可选的、默认的和推理的——继续存在 [参考页](https://btravstack.github.io/btravstack/reference/amqp-worker), (中文(简体) ), 这张名单是详细的.

## 它决定什么,它没有

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

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

## 许可证

[麻省理工学院](https://npmcn.com/package/%40btravstack/amqp-worker/LICENSE) 贝诺伊特旅行社

## 广播订阅

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

## 常见问题

### @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 和提交记录判断。

