商务服务
IM聊天系统为什么需要做消息幂等?如何使用Redis以及Lua脚本做消息幂等【第12期】
2025-01-03 00:33

0前言

前情提要:使用Redis发布 token 以及lua脚本来共同完成消息的幂等

目前已经写的文章有。并且有对应视频版本。
git项目地址 【IM即时通信系统(企聊聊)】点击可跳转
sprinboot单体项目升级成springcloud项目 【第一期】
前端项目技术选型以及页面展示【第二期】
分布式权限 shiro + jwt + redis【第三期】
给为服务添加运维模块 统一管理【第四期】
微服务数据库模块【第五期】
netty与mq在项目中的使用(第六期)】
分布式websocket即时通信(IM)系统构建指南【第七期】
分布式websocket即时通信(IM)系统保证消息可靠性【第八期】
分布式websocket IM聊天系统相关问题问答【第九期】
什么?websocket也有权限!这个应该怎么做?【第十期】
分布式ID是什么,以美团Leaf为例改造融入自己项目【第十一期】

1.我开源项目IM重复的原因

  • IM系统中有三个常见的指标。消息可靠(不丢消息)。就是消息不能重复(不重复)。保证消息的时序性(不乱序)。这三个指标非常重要。
  • 消息可靠主要通过报文协议等操作来完成。前面视频有一期讲过报文协议。目前主要采取上述方式去保证消息的可靠性。然后再保证消息可靠性的过程中,有一些需要重试的操作。可能会导致数据库多次插入。需要我们来保证一下消息的幂等。通俗的讲就是保证消息的不重复。
1.客户端会重复的发送消息

客户端是一个timer的机制。客户端a发送给b消息的时候,在0.5秒没有收到b的ack的时候会重发消息,重发三次还没有收到ack视为重发失败
//使用timer机制 检测队列里面是否存在ack,如果存在,则超时重发以及限制次数

伪代码如下。用户在线并且不是重试消息的时候,添加到队列里面。

 

进行重试的js代码

 
2.mq处理逻辑异常重试机制

mq处理逻辑的时候抛出异常然后重试

 

参考上述逻辑图,消息落库的时候异步分发到了mq上面。rocketmq有超时重试机制,会自动重试。导致消息被多次消费。需要做幂等

2.如何解决的幂等

为什么要解决幂等,什么情况下出现幂等

对同一个资源进行操作副作用只有一次。

  • insert操作,这种情况下多次请求,可能会产生重复数据。

  • update操作,如果只是单纯的更新数据,比如:update user set status=1 where id=1,是没有问题的。如果还有计算,比如:update user set status=status+1 where id=1,这种情况下多次请求,可能会导致数据错误。

使用redis做的幂等。redis做幂等其实有两种思路。

当客户端请求分布式id的时候将其存入redis。也就是获取一个唯一id。当进行消费消息的时候。先判断唯一id在不在。在的话删除redis中的唯一id并且进行业务操作。不再的话就不能进行业务操作来实现的幂等。
流程代码如下所示

1.获取token以及存储token到redis中
在loginUser 用户中心服务中

 

我们使用了美团的分布式id来生成分布式id。
2.前台发送消息的时候携带上唯一id

 

这个是发送消息的操作
const no = await getLeaf();这行代码请求后端接口。然后构造消息体。
3.聊天服务(Netty)收到前台消息后 mq异步发送消息

 

发送给保存的主题
4.业务模块(frist)消费消息

 

lua表达式
目前使用redis的类型是set,键是yan_leaf

    以上就是本篇文章【IM聊天系统为什么需要做消息幂等?如何使用Redis以及Lua脚本做消息幂等【第12期】】的全部内容了,欢迎阅览 ! 文章地址:https://sicmodule.kub2b.com/news/14942.html
     栏目首页      相关文章      动态      同类文章      热门文章      网站地图      返回首页 企库往资讯移动站 https://sicmodule.kub2b.com/mobile/ , 查看更多   
最新文章
过年无忧 | 一键get这些春节话术!
一键Get这些春节话术~过年无忧新年快乐春节将至,年味渐浓在这温馨又热闹的节日氛围里我们既能品尝各式各样的美味佳肴沉浸于味
2025在新加坡生活的我们将迎来“至暗时刻”:房租飙涨、每个月入不敷出…
聚焦新加坡真是开年暴击!2025年刚开始,还没过新年呢,万事通就出了一身冷汗:今年又是一个物价涨涨涨的年份。在网上一搜“新加
太抽象!太抽象!2024年游戏行业简直太抽象!
年末,DataEye研究院今天整点活,轻松一波。——用数据、新闻盘点2024年国内游戏业有多抽象。回首2024年有产品研发8年烧了数亿,
TikTok会如何收场
TikTok的命运再次悬而不决。在美国下架12小时又恢复运营之后,1月20日,美国总统特朗普签署行政命令,要求TikTok「不卖就禁」法
今天上午10:00,成绩发布!
早安,东台!‍今天是2025年1月22日‍星期三(农历腊月廿三)大美东台,活力满满进取创新、奋斗拼搏最近有哪些新动态?和小东一
农村土地托管服务的理论基础
中国产品流通经纪人协会供销合作行业标准《农产品食品供应商信用评价规范》参编单位征集函中国农产品流通经纪人协会供销合作行业
头上三尺有神明,每个人头顶都有一颗星,当星光消失人也就消失!
每当夜晚降临后,我们抬头看天空,会看到满天的星星,自古以来,人们从没有停止过对星象的观测和研究。古人观测星象,一则是为了
运营师抖音代运营
运营师抖音代运营:掌握流行短视频潮流的神奇职业短视频平台已经成为人们娱乐、学习和社交的重要方式。在众多的短视频平台中,抖
微短剧,2024年“最大赢家”? | 年终盘点
2024,短剧行业大变样。作者 | 张语格编辑 | 趣解商业文娱组“互联网大厂争相入局。”“98%的短剧制作方都在亏钱。”“用户被免
同类第一!20%弹性的人工智能 ETF 科创(588760)今日上市,一键布局科创板优质AI龙头
  最新公告内容显示,广发上证科创板交易型开放式指数投资基金(基金代码:588760;扩位简称: ETF 科创)已于 2025 年 1 月 1