nNATS 发布/订阅

NatsEventStore 为 socketio4j 提供一个使用的事件存储 NATS 核心 发布/订阅。 它通过广播消息实现多个服务器实例之间的事件同步,但事件是 短暂的且不持久化,因此适用于不需要持久重放的轻量级、低延迟部署。

关键特性

  • 低延迟广播 — NATS Core 将消息快速传递到所有已连接节点

  • 短暂事件 — 消息不被存储;订阅者只有在在线时才能接收事件

  • 异步且非阻塞 — 调度器在 Netty 事件循环之外运行

  • 按事件主题路由 — 事件类型直接映射到主题

  • 重复防止 — 来自同一节点的事件通过 nodeId

工作原理

  • publish0 对事件进行序列化并将其发送到 NATS 主题

  • subscribe0 注册一个监听相关主题的调度器

  • 消息被传递给监听器 仅当它们来自不同节点时

  • 取消订阅会清理订阅和调度器

  • 关闭会移除所有活动订阅但会 关闭共享的 NATS 连接

模式

模式
行为
何时使用

MULTI_CHANNEL

每种事件类型映射到其自己的主题

默认;主题更小,分离更好

SINGLE_CHANNEL

所有事件路由到 ALL_SINGLE_CHANNEL

当需要跨事件类型的统一顺序时

优点

👍 超低延迟传递 👍 当事件不 需要持久性或重放时的理想选择 👍 非常轻量 — 最少的依赖和配置 👍 当系统已使用 NATS 作为消息传递时非常合适

限制

ℹ️ 事件为 不持久化 — 丢失的消息无法重放 ℹ️ 订阅者必须连接才能接收事件 ℹ️ 在调度器重建或重新连接期间可能发生重复 ℹ️ 不支持消费者偏移、背压或流修剪(这需要 JetStream,目前计划在开发中)

传递保证: 最多一次(At-most-once)语义。 尽力而为的投递,可能丢失消息 — 事件监听器应能容忍丢失或乱序的事件。

最后更新于

这有帮助吗?