3. 最终一致性设计与实现——独立消息服务
3.1 整体架构
3.2 消息服务子系统
3.2.1 基本功能
- 存储预发送消息(主动方业务执行之前进行,预发送的消息存储后状态为待确认)
- 确认并发送消息(主动方业务完成之后,主动方或消息状态确认系统通过此接口将消息变为取消或发送中)
- 查询状态确认超时的消息(消息状态确认系统使用)
- 确认消息已被成功消费(被动方业务执行完成之后调用)
- 查询消费确认超时的信息
3.2.2 数据库设计
字段名 | 含义 |
---|---|
id | 主键ID |
version | 版本号 |
cuser | 创建人 |
muser | 修改人 |
ctime | 创建时间 |
mtime | 修改时间 |
message_id | 消息ID |
message_body | 消息内容 |
message_try_times | 消息重试次数 |
message_queue | 消息队列名 |
message_dead | 消息是否死亡 |
status | 消息状态 |
remark | 备注 |
3.3 消息管理子系统
- 主要用来用于手动管理死亡消息,重发等
3.4 消息状态确认子系统
3.4.1 接口设计
- 处理待确认的超时消息(注意排序,超时时间越长应该越早处理)
3.5 消息恢复子系统
- 主动方调用方业务执行成功,消息服务子系统中消息状态已变成发送中.我们必须保证消息被被动方消费
3.6 实时消息服务子系统
- 使用MQ实现
3.7 异步确认(防止可补偿流程错误导致主流程回滚)
- 主动业务方流程
- 预发送消息
- 执行业务
- 确认发送(如果这一步超时会回滚前面的业务,但是消息已被发送到消息服务子系统并并持久化)