当前位置: 首页 > news >正文

message-api(WebSocket)消息推送:持久/非持久、已读回写、未读重推全链路解析(含双 Kafka、Redis、TiDB、BloomFilter)

本文基于一套真实的message-api(WebSocket)工程实现,拆解持久消息(perss)非持久消息(nonperss)已读回写未读重推(补发)四条链路,并结合代码讲清楚:

  • 为什么要区分 perss / nonperss

  • Redis / TiDB / Kafka 各自承担什么角色

  • BloomFilter 在哪里做去重、为什么要分片

  • 为什么会出现“读了还被推”“重推风暴”,以及如何优化

0. 全景架构(原图)

1. 术语与目标

1.1 perss vs nonperss

  • perss(持久消息):会落库t_message_record(TiDB),支持离线未读补发、已读回写、审计追溯。

  • nonperss(非持久消息):不落库,不做已读闭环,强调即时体验与低成本(用户离线错过即错过)。

1.2 系统目标

  • 可靠性:perss 不丢消息,能补发,读回执最终一致。

  • 性能:高并发推送不拖垮 DB;重推/补发能控住。

  • 可观测:指标(Counter/Latency)能量化吞吐与延迟。

2. Topic 与组件分工

2.1 入口与下发 Topic

  • topic_message_push_perss:持久消息入口(perss)

  • topic_message_push_nonperss:非持久消息入口(nonperss)

  • topic_websocket_send_push(代码里常量WEB_SOCKET_SEND_PUSH):写给 WebSocket 服务的下发 topic

    • sendTwo开关控制,可写到Kafka1Kafka2(双 Kafka)

  • topic_message_readStatus_writeBackWRITEBACK_TOPIC_NAME):已读回写 topic

  • topic_message_unreadMessageResend_notify:触发未读补发的事件 topic(登录/重连等)

2.2 存储

  • TiDBt_message_record持久化消息实体、未读查询源、审计追溯。

  • Redis:轻量状态层(messageId -> 0/1未读/已读)+ BloomFilter(若使用 Redisson RBloomFilter)。

2.3 去重(BloomFilter)

系统里通常存在三类去重:

  1. 发送去重businessId + businessTopic + billNo(避免短窗口重复推送)

  2. 补发事件去重loginName + event(避免短窗口重复触发补发)

  3. 补发消息去重messageId(避免短窗口重复补发同一消息)


3. 持久消息(perss)发送链路(原图 + 代码)

3.1 perss 流程图(原图)

http://www.jsqmd.com/news/494302/

相关文章:

  • 基于改进蛇优化算法(GOSO/ISO)优化极限梯度提升树的数据回归预测(GOSO/ISO-XG...
  • yz-bijini-cosplay多模态实践:文本到图像生成效果展示
  • 为什么你的 Agent 总是“断片”?
  • 密码安全那些事:从明文到 SHA-256 到 BCrypt,为什么一步步升级
  • C++多态:动态行为的核心奥秘
  • 数字电子技术题目
  • 2026年口碑好的纸尿裤工厂推荐:腰贴式纸尿裤/开合式纸尿裤口碑好的厂家推荐 - 品牌宣传支持者
  • 国际大厂德州仪器CC1101无线芯片反向电路学习指南:低功耗传输于ISM频段,模块丰富适合学习...
  • 苍穹外卖Day8 (地址簿 用户下单 功能支付)
  • Node.js 与 npm 的安装与配置(详细教程)
  • WeKnora快速部署攻略:开箱即用,打造个人专属知识问答机器人
  • ssm+java2026年毕设社区医院综合管理信息系统【源码+论文】
  • 三电平T型逆变器仿真模型:基于MATLAB Simulink的PWM控制与无中点电位不平衡控制
  • 小白友好:Qwen3-Reranker-0.6B本地部署,轻松提升RAG检索精度
  • Jmeter实战--压测 基本流程
  • 计算机毕业设计源码:Python基于Spark与Hive的酒店大数据分析与推荐系统 Django框架 Vue 可视化 Hadoop 爬虫 协同过滤推荐算法 民宿 客栈(建议收藏)✅
  • Windows系统下SIMetrix库管理终极方案:自定义中央仓库+环境变量配置教程
  • SpringAI大语言模型应用案例:智能问答系统开发
  • Python 深度学习代码调试,图像分割代码调试,图像分割代码 1、2D医学图像分割项目
  • SPI时序模式0-3终极图解:用逻辑分析仪抓取NRF24L01与SD卡的真实波形
  • Cesium新手避坑指南:从SHP到3D城市可视化的完整实战流程(附GitHub源码)
  • 用C语言程序解决两个简单问题
  • GitHub上的R包突然安装不上的原因之一
  • UniApp+SVGA跨端动画开发避坑指南:微信小程序与H5的兼容性处理大全
  • SpringAI集成OpenAI:从配置到调用实战
  • 手把手教你用MP2144搭建超低功耗单键开关机电路(含完整代码)
  • 矩转换矩阵
  • RePKG:Wallpaper Engine资源处理的高效工具与创新方案
  • 用AutoDL+SSH+VSCode搭建深度学习环境:保姆级连麦调试教程
  • 声纳方程实战指南:如何用Python模拟水下声波传播(附代码)