本文最后更新于 2 分钟前,文中所描述的信息可能已发生改变。
定序模块
定序模块处理逻辑
防丢机制解析
每个事件消息包含:
- Sequence ID (
sid
):事件的唯一全局递增 ID。 - Previous ID (
pid
):前一个事件的sid
,形成 链式结构。 - 消息内容 (
msg
):实际业务数据。
示例
┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐
│sid=1│ │sid=2│ │sid=3│ │sid=4│
│pid=0│──▶│pid=1│──▶│pid=2│──▶│pid=3│
│msg=A│ │msg=B│ │msg=C│ │msg=D│
└─────┘ └─────┘ └─────┘ └─────┘
消息去重机制
┌─────┐┌─────┐┌─────┐┌ ─ ─ ┐┌ ─ ─ ┐┌─────┐
│sid=1││sid=2││sid=3│ sid=2 sid=3 │sid=4│
│pid=0││pid=1││pid=2││pid=1││pid=2││pid=3│
│msg=A││msg=B││msg=C│ msg=B msg=C │msg=D│
└─────┘└─────┘└─────┘└ ─ ─ ┘└ ─ ─ ┘└─────┘
sid=2
和sid=3
发生重复,接收方会 检测sid
是否已经处理过,并 丢弃重复消息。
消息丢失检测
┌─────┐┌─────┐┌ ─ ─ ┐┌─────┐
│sid=1││sid=2│ │sid=4│
│pid=0││pid=1││ ││pid=3│
│msg=A││msg=B│ │msg=D│
└─────┘└─────┘└ ─ ─ ┘└─────┘
sid=3
丢失,接收方检测到sid=4
的pid=3
,但自己未收到sid=3
,立即触发 补偿机制。
补偿机制
- 查询数据库(或持久化存储) 获取丢失的消息:
- 若
sid=3
早已落库,则读取并补发。 - 若
sid=3
仍未落库,则等待后续补发。
- 若
- 主动请求重发:
- 通过 API 通知定序系统,要求补发
sid=3
的数据。
- 通过 API 通知定序系统,要求补发
总结
如何保证消息的顺序性、幂等性和完整性?
- 去重:每个事件携带全局唯一
sid
,下游系统去重处理。 - 检测丢失:
pid
记录前一事件的 ID,形成链式结构,能发现丢失事件。 - 补偿机制:若
sid
断层,查询数据库或请求补发,确保数据完整性。