项目整理: 平台PC端WebSocket推送消息机制优化

需求背景

  1. 之前方案为了降低HTTP请求数,采用WS推送平台下订单的消息

  2. 在更新独立部署时,由于之前采用单连接,单消费的设计,在多节点情况下会出现消息不灵通的现象

  3. 原有方案设计

    • 消息服务: 接收请求并接收TCP客户端连接的消息,为TCP客户端推送消息
    • 队列消费: 根据客户端的消息,消费Redis的数据,并返回给TCP层,有TCP发送给用户
  4. 原有方案缺陷

    • 当节点1消费Redis后返回的数据只能用户1接收
    • 当节点2消费Redis后返回的数据只能用户2接收
    • 当节点N消费Redis后返回的数据只能用户N接收
  5. 调整方案

    • 所有的消费Redis的数据,应该全部通知用户
假设3个客户端连接
用户1连接
用户2连接
用户3连接
消费
消费
消费
平台用户
K8S-Service
负载选择
消息服务1
消息服务2
消息服务3
队列服务1
队列服务2
队列服务3
Redis队列

方案优化

  1. 保留原方案TCP服务: 接收请求并接收TCP客户端连接的消息,为TCP客户端推送消息
  2. 优化消息队列服务方案
    • 取消队列服务功能,增加消息队列服务
    • 增加服务监听服务,监听消息队列服务
  3. 优化的实现机制
    • 每个节点均运行三个服务: 消息服务、队列服务、监听服务
    • 消息服务: 与TCP客户端收发消息
    • 监听服务: 多个监听会在多个队列服务选择一个主队列服务。并接收主队列服务广播的消息
    • 队列服务: 监听Redis队列,并发数据广播到所有的监听服务
假设3个客户端连接
用户1连接
用户2连接
用户3连接
广播
广播
广播
广播
广播
广播
广播
广播
广播
消费
消费
消费
平台用户
K8S-Service
负载选择
消息服务1
消息服务2
消息服务3
监听服务1
监听服务2
监听服务3
队列服务1
队列服务1
队列服务1
Redis队列

测试内容

  1. 是否能正常接收消息,主要观察WS服务是否有消息推送服务
    • 用户下单后会push一条数据到Redis队列
    • 队列服务会送Redis获取推送数据并推送至平台
  2. 在多节点的情况下,多开客户端,登陆同一个账号,是否能正常收到推送消息
  3. 推送测试可分为两个阶段
    • 功能测试,直接手动push数据到队列,模拟下单
    • 验收测试,用户下单push数据
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java WebSocket是一种在Web应用程序之间实现双向通信的技术。实现WebSocket消息的方式有多种。其中一种方式是通过使用Java的WebSocket API来实现一个WebSocket服务器,并在服务器使用WebSocket连接将消息到客户。 根据引用中的代码示例,可以看到在Java中使用WebSocket消息的步骤。首先,在Controller类中创建一个用于处理WebSocket连接的方法,如@GetMapping("/socket/{cid}")。这个方法接受一个路径参数cid,表示连接的客户ID。然后,在数据的接口中,使用WebSocketServer.sendInfo(message,cid)方法将消息给指定的客户。 另外,根据引用中的代码示例,还可以通过创建一个WebSocketService类来发消息。在该类中,使用WebSocketService的sendMessage方法来发消息给客户。 综上所述,要在Java中实现WebSocket消息,可以通过创建一个WebSocket服务器或使用WebSocketService类来发消息给客户。具体的实现方式可以根据具体需求和代码示例进行调整。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Java消息 WebSocket通信](https://download.csdn.net/download/lj88811498/12453985)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [java WebSocket 实现消息](https://blog.csdn.net/qq_32091599/article/details/106357195)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Java版 WebSocket实现消息【保姆来了!】](https://blog.csdn.net/weixin_53059814/article/details/126905593)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值