@ btravstack/ 发包箱
交易收发箱中继器
@btravstack/core: 民意测验循环 以收发箱顺序公布事实的 因此,复制品是轮流的,而不是为同一行的比赛 8号店.
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 仅限一毫秒的融合需要它.
实例
应用程序在与其相同的交易中写出其外框行 描述——保持自己的状态. 它能提供继电器的是桌子的位置 出版一行意味着:
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排水过程中停止新的索赔.
排水槽等待当前索赔, 直至内核的最后期限; 瞄准镜拆卸等待
在发布数据库和出版商资源之前
内核停站截止时间. 相同的选项和出箱时滞检查适用 .
这个 独立实例
显示完整的根。 保留 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和推理——活 打开 参考页, (中文(简体) ), 这张名单是详细的.
它决定什么,它没有
决定 送货时间最少一次 接发器发布
租户在他们要求的会话中生活的时候
而不是竞相争取租户的排位 和租户所犯事实
出箱顺序( 这不是承诺命令 : 参考页上写的是什么 )
表示主题); 会话丢失了中节, 如发布器之间崩溃
及其标记,复出者,即被拒绝者
公布其租户的批次 并背着租户离开
落在后面是不健康的 /healthz。订阅者在
出版商在电线上放的.
它没有决定 什么样的出版物, 什么样的运输 它骑或如何
有效载荷被编码——这是你的 OutboxPublisher - 或交易
写行,这是你的适配器。 没有完全的一对一,没有
第二家商店; 原因在 AGENTS.md。 。 。 .
许可证
麻省理工学院