@algoan/pubsub

中文文档
6.4.3发布于 2026/10/22ISCTypeScriptCommonJS构建来源已验证近 30 天下载 1.2万

用于 algoan 的 PubSub 图书馆

中文使用文档
文档目录15 节
  1. 安装
  2. 使用量
  3. Google Cloud PubSub (Google Cloud PubSub) (英语)
  4. 捐款
  5. API 密码
  6. PubSubFactory.create({ transport, options })
  7. pubsub.listen(event, opts)
  8. pubsub.emit(event, payload, opts)
  9. pubsub.unsubscribe(event)
  10. 死信主题
  11. 方式1:每个订阅的孤立的死字题(推荐给多消费者系统)
  12. 模式2:共享的死字母主题(所有订阅的单 DLT)
  13. 模式 3: 订阅覆盖
  14. 配置排水口订阅(例如保留电文)
  15. 没有死字题

普贝

这是普布Sub工厂的通称 揭露一种听觉和放电方法.

页:1: 今天,仅限 Google Cloud PubSub (Google Cloud PubSub) (英语) 已添加.

安装

npm install --save @algoan/pubsub

使用量

Google Cloud PubSub (Google Cloud PubSub) (英语)

运行测试

要进行测试或尝试 PubSubFactory 类,您需要有一个google 账户并安装了 gcloud sdk.

然后,安装 Google PubSub 模拟器,运行 :

gcloud components install pubsub-emulator
gcloud components install beta
gcloud components update

开始运行测试 :

npm test

将推出Google PubSub模拟器 google-pubsub 模拟器 图书馆.

示例

使用 Google 云创建 PubSub 实例 :

import { EmittedMessage, GCPubSub, PubSubFactory, Transport } from '@algoan/pubsub'

const pubsub: GCPubSub = PubSubFactory.create({
  transport: Transport.GOOGLE_PUBSUB,
  options: {
    projectId: 'test',
    // And all other Google PubSub properties
  }
});
const topicName: string = 'some_topic';

await pubsub.listen(topicName, {
  autoAck: true,
  onMessage: (data: EmittedMessage<{foo: string}>) => {
    console.log(data.parsedData); // { foo: 'bar', time: {Date.now}, _eventName: 'some_topic' }
    // do whatever you want. The message has already been acknowledged
  },
  onError: (error: Error) => {
    // Handle error as you wish
  }
});

await pubsub.emit(topicName, { foo: 'bar' });

捐款

感谢您未来的贡献 请跟随 这些指示 在启动拉力请求之前!

API 密码

PubSubFactory.create({ transport, options })

唯一的静态方法 PubSubFactory 课。 它根据具体情况启动一个新的PubSub实例 transport。默认情况下,它连接到 Google Cloud PubSub (Google Cloud PubSub) (英语)。 。 。 .

  • transport:用PubSub技术. 仅 GOOGLE_PUBSUB 现在已经可以使用.
  • options: 与运输有关的选项.
    • 若为 transport === Transport.GOOGLE_PUBSUB,然后来看看 谷歌 Cloud PubSub 配置客户端。 。 。 .
    • debug: 如果设置为真, 显示日志 。 它使用一个 皮诺伐木机 财务报告和审定财务报表 皮诺色 若为 NODE_ENV 不等同于 production。 。 。 .
    • pinoOptions: 如果 debug 设置为真,设置为 皮诺日志选项默认为 level: debug 财务报告和审定财务报表 prettyPrint: true 若为 NODE_ENV 不等同于 production。 。 。 .
    • topicsPrefix: 在所有创建的主题中添加前缀. 示例 topicsPrefix: 'my-topic',所有主题都将从 my-topic+{your topic name}。 。 。 .
    • topicsSeparator: 自定义主题前缀和主题名之间的分隔符. 示例 topicsSeparator: '-',所有的主题将是 {topic prefix}-{your topic name} (default to '+')。 。 。 .
    • subscriptionsPrefix: 在所有已创建的订阅中添加前缀. 示例 subscriptionsPrefix: 'my-sub',所有订阅从 my-sub%{your topic name}。 。 。 .
    • subscriptionsSeparator: 自定义订阅和话题名之间的分隔符。 示例 subscriptionsSeparator: '-',所有订阅将 {subscription prefix}-{your topic name} (default to '%')。 。 。 .
    • namespace: 添加命名空间属性到 信件属性 当发表一个话题时.
    • environment: 将环境属性添加到 信件属性 当发表一个话题时.

pubsub.listen(event, opts)

听听具体事件.

页:1: 它只使用 谷歌云订阅拉 现在就送货.

  • event:活动名称.
  • opts: 与听众方法有关的选项
    • onMessage: 接收消息时调用的方法
    • onError: 发生错误时调用的方法
    • options: 与所选运输有关的选项

如果选择的运输方式是 Google Cloud PubSub, 那么 options 将:

  • autoAck: 一收到事件(默认为 true(中文(简体) )
  • subscriptionOptions: 与创建的订阅有关的选项 :
    • name: 自定义订阅名称。 默认 : event (也与题目名称等同)
    • get: 适用于 getSubscription 方法(请查看 订阅选项(中文(简体) )
    • sub: 适用于订阅实例的选项(另见 setOptions 方法(中文(简体) )
    • create: 适用于 createSubscription 方法(请查看 创建订阅选项(中文(简体) )
    • deadLetterTopicName: 死信题名的订阅覆盖(见 死信主题(中文(简体) )
  • topicOptions: 适用于所创建主题的选项(请查看 专题选项(中文(简体) )
  • topicName:设置主题名. 默认情况下,它使用带有前缀的默认名称.

pubsub.emit(event, payload, opts)

释放带有有效载荷的特定事件. 如果您在设置时添加了命名空间或环境, 它会在信件中添加属性 PubSubFactory 课。 也增加了一个 _eventName (单位:千美元) time 释放的属性 payload。 。 。 .

  • event:要发射的事件名称.
  • payload: 寄出有效载荷. 由Google缓冲,然后由Google解析 听着 方法.
  • opts: 与 Emit 方法有关的选项
    • metadata: 自定义添加到信件中的元数据
    • options: 与所选运输有关的选项

如果选择的运输方式是 Google Cloud PubSub, 那么 options 将:

  • topicOptions: 适用于所创建主题的选项(请查看 专题选项(中文(简体) )
  • publishOptions: 发布主题创建后设定的选项. 参见 发布选项
  • messageOptions: 给消息添加了额外消息选项. 参见 信件选项

pubsub.unsubscribe(event)

停止给定订阅的服务器连接 .

  • event: 停止倾听的活动名称.

死信主题

何时 deadLetterOptions 设置在构建器选项中,库自动:

  1. 创建死字母主题( 如果不存在)
  2. 创建关于死信题的排入订阅( 防止 GCP 丢弃未发送的消息)
  3. 赠款 roles/pubsub.publisher gCP Pub/Sub服务账户的死信题
  4. 赠款 roles/pubsub.subscriber gCP Pub/Sub服务账户的原始订阅
  5. 应用 deadLetterPolicy 创建的订阅

这个设定只会发生 每新订阅一次 重新连接到已有的订阅费用为零.

奥米 deadLetterTopicName。每个订阅自动获得自己的 <subscriptionName>-deadletter ,所以来自不同消费者的失败消息是孤立的,可以独立地重播.

const pubsub: GCPubSub = PubSubFactory.create({
  transport: Transport.GOOGLE_PUBSUB,
  options: {
    projectId: 'my-project',
    deadLetterOptions: {
      maxDeliveryAttempts: 10, // optional, defaults to 5
    },
  },
});

// Each listen() call creates its own isolated dead-letter topic:
// - "my-orders-sub-deadletter" for the first subscription
// - "my-payments-sub-deadletter" for the second
await pubsub.listen('my-orders-sub');
await pubsub.listen('my-payments-sub');

模式2:共享的死字母主题(所有订阅的单 DLT)

提供 deadLetterTopicName 以将所有失败的消息传送到一个共享的话题。 全球协商进程中必须已经存在这一专题.

const pubsub: GCPubSub = PubSubFactory.create({
  transport: Transport.GOOGLE_PUBSUB,
  options: {
    projectId: 'my-project',
    deadLetterOptions: {
      deadLetterTopicName: 'projects/my-project/topics/my-dead-letter', // fully-qualified or short name
      maxDeliveryAttempts: 5,
    },
  },
});

await pubsub.listen('my-orders-sub');   // routes to "my-dead-letter"
await pubsub.listen('my-payments-sub'); // routes to "my-dead-letter"

模式 3: 订阅覆盖

覆盖一个特定的订阅方式的死字题 subscriptionOptions.deadLetterTopicName。返回实例一级 deadLetterTopicName,然后如果两者都未设定,则自动删除.

await pubsub.listen('my-special-sub', {
  options: {
    subscriptionOptions: {
      deadLetterTopicName: 'projects/my-project/topics/special-dead-letter',
    },
  },
});

配置排水口订阅(例如保留电文)

默认情况下,在死字题上创建的排水层订阅会使用Google Cloud默认——特别是a 7天时间 保留信件。 提供 drainSubscriptionOptions 以覆盖 CreateSubscriptionOptions 当创建下水道订阅时使用(例如,将死字留言保存最多31天,以便有更多的时间检查和重放).

const pubsub: GCPubSub = PubSubFactory.create({
  transport: Transport.GOOGLE_PUBSUB,
  options: {
    projectId: 'my-project',
    deadLetterOptions: {
      drainSubscriptionOptions: {
        messageRetentionDuration: { seconds: 2678400 }, // 31 days (max)
      },
    },
  },
});

await pubsub.listen('my-orders-sub');

和其他的死信设置一样,这只有在排水口订阅时才适用 创建 ——已经存在的排水量认购未受影响.

没有死字题

若为 deadLetterOptions 没有设置,没有创建死信资源,也没有进行IAM呼叫——完全后向兼容.

const pubsub: GCPubSub = PubSubFactory.create({
  transport: Transport.GOOGLE_PUBSUB,
  options: {
    projectId: 'my-project',
    // no deadLetterOptions — existing behavior unchanged
  },
});

版本与发布记录

@algoan/pubsub 共发布 45 个版本,首次发布于 2020/04/15;过去 12 个月发布了 5 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
6.4.3latest2026/10/2217 天前
6.4.22026/09/221 个月前
6.4.02026/08/172 个月前
6.3.12026/06/164 个月前
6.3.02026/03/197 个月前
6.2.02024/02/262 年前

关于 @algoan/pubsub 的常见问题

@algoan/pubsub 是什么?

用于 algoan 的 PubSub 图书馆

如何安装 @algoan/pubsub?

在项目目录运行 npm install @algoan/pubsub,或使用 pnpm add / yarn add / bun add。

@algoan/pubsub 支持 TypeScript 吗?

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

@algoan/pubsub 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@algoan/pubsub 需要什么版本的 Node.js?

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

@algoan/pubsub 可以商用吗?

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

@algoan/pubsub 的下载量有多少?

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

@algoan/pubsub 还在维护吗?

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