论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
qidao123.com技术社区-IT企服评测·应用市场
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
怎样保证消息队列的消息只能被消费一次 ...
怎样保证消息队列的消息只能被消费一次
知者何南
论坛元老
|
2025-3-26 01:44:22
|
显示全部楼层
|
阅读模式
楼主
主题
2063
|
帖子
2063
|
积分
6189
怎样保证消息队列的消息只能被消费一次,首先先保证消息不会丢失
首先先生产者到消费者到消费者有哪些场景会消息丢失
一、问题场景
场景一、生产者发送到消息队列失败
场景二、消息队列接受到消息磁盘化失败
场景三、消费者接受到消息消费失败
二、场景原因,怎样解决
1、场景一失败的原因:大概出现在生产者发送给消息队列消息时大概会出现网络抖动,导致发送失败。也有大概消息队列服务挂掉导致发送失败。
解决方法:可以接纳消息重传的方式,先可以接纳在内存中重试几次,如果重试次数达到最大重试次数,将该消息放到一张记载表中,延时重发即可。当然这种做法大概会有重复消息,
这里只需要确保消息发送到消息队列即可,怎样保证消息发送到消息队列,以rocketMQ为例,确保rocketMQ开启ack确认机制,当rocketMQ接受到消息会返回给生产者一条
ack,当生产者收到了ack才阐明此条消息到达了rocketMQ,若没有收到一律按照重传处理
2、场景二失败的原因:会出现这种原因是因为消息队列将消息持久化机制有关。持久化机制有两种,一种是异步刷盘,一种是同步刷盘。
异步刷盘是生产者将消息发送给消息队列,消息队列并不是将消息立即将消息存到磁盘,而是将消息消息存到内存或者操纵系统的缓存里,消息累计到肯定的数目才会将消息持久化到磁盘上,这时消息在内存到中消息队列就会发送给生产者一条消息确认消息,在单机的状态下,如果消息没有消费消息队列重启或者挂掉会导致消息丢失。在集群的环境下也有大概会出现消息丢失,当主节点收到生产者的消息,在主节点和从节点消息同步时,主节点还没有消息持久化,没有同步给从节点,这个时候主节点挂点,从节点晋升为主节点,这个时候会出现消息丢失
同步刷盘是将消息持久化到磁盘中才会返回给生产者ack。
解决方法:将消息队列消息持久化设置成同步刷盘就可以解决这个问题
3、场景三失败原因:以上两点只需要保证消息不丢失即可。那为什么消费者也会出现消息的丢失呢?有几个原因,第一个原因当消费者还有没有消费完消费者出现了宕机或者异常,提前将进度更新到消息队列中,消息队列就不会重复的消费了。第二个原因生产者生产重复消息到了消费者,消费者无法重复消费消息。
解决方法:
首先消费者先插入一个消费记载表,插入成功就实行业务代码,业务代码步伐成功就更新记载表状态,业务代码未实行成功,删除记载表中的数据重新实行,如果是bug可以人工干预一下。如果插入记载表失败,检查记载表的状态。如果说已经完成,直接返回消费成功,如果是未完成,耽误消费即可。
这个时候会有一个问题,如果在实行业务代码时出现了宕机等状况,没有来得及删除删除记载表数据,会出现消息开始 -> 插入状态 ->耽误消费的死循环,这个时候就需要人工干预,或者记载消息消费的消费次数时候还是不是需要再消费
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
知者何南
论坛元老
这个人很懒什么都没写!
楼主热帖
SQLServer数据库基础教程
Sqlserver创建用户并授权
开源二三事|ShardingSphere 与 Databa ...
ESP32-C3 学习测试 蓝牙 篇(六、添加 ...
「笔记」某移动SRE运维体系交流 ...
Oracle调度器Scheduler
华为再次登上央视!鸿蒙系统3.0今年上 ...
我眼中的大数据(三)——MapReduce ...
这个简单的小功能,半年为我们产研团队 ...
Kubernetes(K8S) Controller - Statefu ...
标签云
渠道
国产数据库
集成商
AI
运维
CIO
存储
服务器
快速回复
返回顶部
返回列表