# @btravstack/outbox 中文文档

规范地址：https://npmcn.com/package/%40btravstack/outbox/

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

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

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

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

- 包体积（解压后）：76.3 kB，13 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- Node.js 要求：\>=22\.12
- 运行依赖：0 个
- peer 依赖：unthrown ^5\.0\.0，@btravstack/di ^0\.58\.0，@btravstack/core ^0\.58\.0，temporal-polyfill ^1\.0\.4，@btravstack/config ^0\.58\.0，@prisma/orm-postgres ^8\.0\.0-rc\.11
- 首次发布：2026-10-07T19:33:05.513Z
- 最新版本发布：2026-11-07T21:12:14.646Z
- 近 30 天下载量：8076（2026-10-09 至 2026-11-07，npm 官方下载统计）
- 已发布版本数：48（近 12 个月 48 个）

## 中文简介

@btravstack/core的交易出柜中继器:一个按出柜顺序公布已承诺事实的民意调查循环,一个按租户要求的复制品轮流进行而不是竞相进行,以及一个Prisma 8商店

## 安装

```sh
npm install @btravstack/outbox
```

也可以使用：`pnpm add @btravstack/outbox`、`yarn add @btravstack/outbox`、`bun add @btravstack/outbox`

## README

# @ btravstack/ 发包箱

> 交易收发箱中继器 [`@btravstack/core`](https://npmcn.com/package/%40btravstack/core): 民意测验循环 以收发箱顺序公布事实的 因此,复制品是轮流的,而不是为同一行的比赛 8号店.

📖 **[文档](https://btravstack.github.io/btravstack/reference/outbox)** • 妇女 [API 参考](https://btravstack.github.io/btravstack/api/outbox/)

```sh
pnpm add @btravstack/outbox @btravstack/core @btravstack/config @btravstack/di unthrown temporal-polyfill
```

`@prisma/orm-postgres` 是一个可选的对等点,只有在您编曲时需要 Prisma 商店来自 `@btravstack/outbox/prisma`节点 `>=22.12`。 。 。 .

发生时间戳是 `Temporal.Instant`,保存数据库微秒 通过阅读和出版。 按顺序排列 `toString()`; 使用 `epochMilliseconds` 仅限一毫秒的融合需要它.

## 实例

应用程序在与其相同的交易中写出其外框行 描述——保持自己的状态. 它能提供继电器的是桌子的位置 出版一行意味着:

```ts
import { OutboxPublisher, OutboxStore, outbox } from "@btravstack/outbox";
import { prismaOutboxStore } from "@btravstack/outbox/prisma";

const store = Provider(OutboxStore)({
  inject: { db: OrderDatabase },
  sync: ({ db }) => prismaOutboxStore(db, { schema: "orders" }),
});

const publisher = Provider(OutboxPublisher)({
  inject: { broker: Broker },
  sync: ({ broker }) => ({
    publish: (message) =>
      broker.send(`${message.kind}.changed`, {
        eventId: message.id,
        tenantId: message.tenantId,
        id: message.subjectId,
        payload: message.payload === null ? null : JSON.parse(message.payload),
      }),
  }),
});

export const Relay = Module("Relay")({
  imports: [OrderPersistenceModule, BrokerModule, outbox()],
  provides: [store, publisher],
  exports: [],
});
```

## 一个独立的中继程序

使用 `outboxRuntime()` 替换 `outbox()` 和导出 `OutboxRuntime` 财务报告和审定财务报表 `HealthChecks` 从根相传 `runMain`开始投票时间 在SIGTERM排水过程中停止新的索赔. 排水槽等待当前索赔, 直至内核的最后期限; 瞄准镜拆卸等待 在发布数据库和出版商资源之前 内核停站截止时间. 相同的选项和出箱时滞检查适用 .

这个 [独立实例](https://btravstack.github.io/btravstack/reference/outbox#standalone-processes-outboxruntime-options) 显示完整的根。 保留 `outbox()` 将中继器嵌入 HTTP 或 工人过程.

## 选项

| 选项 | 何处 | 这是什么 |
| --- | --- | --- |
| `OUTBOX_TENANTS` | 环境,或 `tenants` | 接力服务,以逗号分隔的租户 |
| `OUTBOX_POLL_MS` | 环境,或 `pollMs` | 横扫之间闲置睡眠( 默认) `200`(中文(简体) ) |
| `OUTBOX_MAX_LAG_MS` | 环境,或 `maxLagMs` | 最年长的待决年龄 `outbox` 健康检查容忍(默认60 s) |
| `OUTBOX_RETAIN_MS` | 环境,或 `retainMs` | 在中继删除之前, 已公布行会保存多久( 默认: 保存) |
| `OUTBOX_CONCURRENCY` | 环境,或 `concurrency` | 有多少房客要求一次性提供联通服务(`4`(中文(简体) ) |
| `clock` | `outbox({ clock })` | 民意调查所沉睡的,和所发现的滞后(默认): `systemClock`(中文(简体) ) |
| `schema`, (中文(简体) ), `table` | `prismaOutboxStore(db, {…})` | 模型所在位置( 默认) `public`, (中文(简体) ), `outboxMessage`(中文(简体) ) |
| `columns` | `prismaOutboxStore(db, {…})` | 物理列名称,用于绘制模型 `@map` |
| `tenantSetting` | `prismaOutboxStore(db, {…})` | 每一个房客的读物被固定在,因为 `@@rls` (单位:千美元)`app.tenant_id`(中文(简体) ) |

完整表——默认,语义,表的PSL和推理——活 打开 [参考页](https://btravstack.github.io/btravstack/reference/outbox), (中文(简体) ), 这张名单是详细的.

## 它决定什么,它没有

**决定** 送货时间最少一次 接发器发布 租户在他们要求的会话中生活的时候 而不是竞相争取租户的排位 和租户所犯事实 出箱顺序( 这不是承诺命令 : 参考页上写的是什么 ) 表示主题); 会话丢失了中节, 如发布器之间崩溃 及其标记,复出者,即被拒绝者 公布其租户的批次 并背着租户离开 落在后面是不健康的 `/healthz`。订阅者在 出版商在电线上放的.

**它没有决定** 什么样的出版物, 什么样的运输 它骑或如何 有效载荷被编码——这是你的 `OutboxPublisher` - 或交易 写行,这是你的适配器。 没有完全的一对一,没有 第二家商店; 原因在 [`AGENTS.md`](https://npmcn.com/package/%40btravstack/outbox/AGENTS.md)。 。 。 .

## 许可证

麻省理工学院

## 常见问题

### @btravstack/outbox 是什么？

@btravstack/core的交易出柜中继器:一个按出柜顺序公布已承诺事实的民意调查循环,一个按租户要求的复制品轮流进行而不是竞相进行,以及一个Prisma 8商店

### 如何安装 @btravstack/outbox？

在项目目录运行 npm install @btravstack/outbox，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：unthrown（^5\.0\.0）、@btravstack/di（^0\.58\.0）、@btravstack/core（^0\.58\.0）、temporal-polyfill（^1\.0\.4）、@btravstack/config（^0\.58\.0）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @btravstack/outbox 支持 TypeScript 吗？

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

### @btravstack/outbox 支持 ESM 还是 CommonJS？

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

### @btravstack/outbox 需要什么版本的 Node\.js？

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

### @btravstack/outbox 可以商用吗？

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

### @btravstack/outbox 的下载量有多少？

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

### @btravstack/outbox 还在维护吗？

最新版本 0\.58\.0 发布于 2026/11/08（今天）；至今共发布 48 个版本，其中过去 12 个月发布了 48 个；首次发布于 2026/10/08。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

