hHazelcast 发布/订阅

HazelcastPubSubEventStore 为 socketio4j 提供分布式事件存储,使用 Hazelcast ITopic。 它通过在集群节点之间广播事件实现水平扩展,以便房间加入、离开、状态更改、确认和其他内部事件在多个服务器实例之间保持同步。

关键特性

  • 分布式事件广播 —— 所有节点接收所有发布的事件

  • 异步非阻塞分发 —— Hazelcast 在 Netty 事件循环之外管理传递

  • 按事件的主题支持 —— 允许事件类型的多通道分离

  • 简单集成 —— 使用核心 Hazelcast 功能,无需环形缓冲区配置

  • 重复防止 —— 使用 nodeId 过滤

工作原理

  • 事件被发布到 Hazelcast ITopic 实例(根据模式可能是一个或多个)

  • 每个订阅的服务器为事件传递注册 Hazelcast 消息监听器

  • 本地监听器仅接收外部来源的事件(nodeId 不匹配)

  • 监听器注册按事件类型跟踪,以便实现受控的取消订阅和关闭

模式

模式
行为
何时使用

MULTI_CHANNEL

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

默认;隔离事件流量

SINGLE_CHANNEL

所有事件路由到 ALL_SINGLE_CHANNEL

当需要跨类型顺序时

优点

👍 适用于多节点部署 👍 如果已使用 Hazelcast 进行集群,则无需额外的代理 👍 易于配置和集成 👍 干净的取消订阅和关闭处理 👍 适合已使用 Hazelcast 管理分布式状态的应用

限制

ℹ️ 除了 Hazelcast 主题缓冲外无消息持久化——重启时消息可能丢失 ℹ️ 顺序性是按主题的,而非跨所有事件类型的全局顺序 ℹ️ 无历史重放——监听器只能接收订阅之后的消息 ℹ️ 故障转移期间可能出现重复投递

传递保证: 至少一次语义——事件监听器必须具备幂等性以安全处理重复消息。

最后更新于

这有帮助吗?