事件存储

EventStore interface 定义了 socketio4j 的分布式事件同步层。 它为在一个或多个服务器实例之间发布和订阅内部事件(例如加入房间、离开、确认、会话更改和节点间同步)提供了统一的抽象。

关键特性

  • 统一的事件 API — 对所有后端使用相同的发布/订阅模型

  • 类型化分发 — 监听器接收强类型的 EventMessage 对象

  • 节点感知过滤 — 实现通常通过忽略自发起事件来避免重复处理 nodeId

  • 可插拔传输 — Kafka、Redis Streams、Hazelcast、NATS、内存回退等。

  • 生命周期控制 — 标准化的 发布, 订阅, 取消订阅, 关闭

工作原理

  • 发布 → 通过后端特定的发送实现 publish0

  • 订阅 → 通过 注册事件监听器 subscribe0

  • 取消订阅 → 通过 移除监听器并清理 unsubscribe0

  • 关闭 → 通过 释放后端资源 shutdown0

  • 实现通过 方法提供传输行为;该接口对流程和错误处理进行标准化 *0 方法;该接口对流程和错误处理进行标准化

事件路由属性

属性
含义

EventStoreMode

MULTI_CHANNEL (每事件的流/主题)或 SINGLE_CHANNEL (统一通道)

EventStoreType

声明传输类别: STREAM, PUBSUB, LOCAL,等。

PublishMode

描述期望的可靠性: RELIABLEUNRELIABLE

nodeId

标识节点;用于避免重新处理本地事件

注意: getNodeId() 默认提供一个随机 ID。 对于分布式部署,请配置一个 稳定的节点标识 通过 StoreFactory.

优点

👍 在不更改代码的情况下切换分布式传输 👍 集中错误记录和流程语义 👍 为自定义后端提供明确的扩展钩子 👍 抽象处理传输差异

限制

ℹ️ 交付保证取决于实现 — 接口不强制执行 ℹ️ 持久性、排序、去重是后端的责任 ℹ️ nodeId基于 的本地过滤必须被遵守以避免重复


交付保证

EventStore 接口未定义交付保证。 可靠性、重放和排序完全取决于所选后端(例如,Redis Streams = 至少一次;Redis Pub/Sub = 尽力而为;Kafka = 至少一次;内存 = 仅限本地)。

最后更新于

这有帮助吗?