需求背景
-
之前方案为了降低HTTP请求数,采用WS推送平台下订单的消息
-
在更新独立部署时,由于之前采用单连接,单消费的设计,在多节点情况下会出现消息不灵通的现象
-
原有方案设计
- 消息服务: 接收请求并接收TCP客户端连接的消息,为TCP客户端推送消息
- 队列消费: 根据客户端的消息,消费Redis的数据,并返回给TCP层,有TCP发送给用户
-
原有方案缺陷
- 当节点1消费Redis后返回的数据只能用户1接收
- 当节点2消费Redis后返回的数据只能用户2接收
- 当节点N消费Redis后返回的数据只能用户N接收
-
调整方案
- 所有的消费Redis的数据,应该全部通知用户
方案优化
- 保留原方案TCP服务: 接收请求并接收TCP客户端连接的消息,为TCP客户端推送消息
- 优化消息队列服务方案
- 取消队列服务功能,增加消息队列服务
- 增加服务监听服务,监听消息队列服务
- 优化的实现机制
- 每个节点均运行三个服务: 消息服务、队列服务、监听服务
- 消息服务: 与TCP客户端收发消息
- 监听服务: 多个监听会在多个队列服务选择一个主队列服务。并接收主队列服务广播的消息
- 队列服务: 监听Redis队列,并发数据广播到所有的监听服务
测试内容
- 是否能正常接收消息,主要观察WS服务是否有消息推送服务
- 用户下单后会push一条数据到Redis队列
- 队列服务会送Redis获取推送数据并推送至平台
- 在多节点的情况下,多开客户端,登陆同一个账号,是否能正常收到推送消息
- 推送测试可分为两个阶段
- 功能测试,直接手动push数据到队列,模拟下单
- 验收测试,用户下单push数据