消息队列+更新DB极易引发的DB并发修改bug

背景

我们在生产系统中和其他系统进行交互时一般都会通过消息队列来解耦生产者和消费者,然后通过每个使用方消费消息队列的消息的方式来完成消息的消费,并且一般来说我们消费消息后极有可能会操作DB,不过这种方式如果处理不够仔细,很容易发生DB并发更新导致的数据覆盖

问题复现

解决方案:

1.对于DB的同一条记录的操作需要有先后顺序,这就要求对于同一个mid的消息消费要串行,而不能并行,所以这就要求生产者发送消息到消息队列时需要按照mid进行partition分区,这样同一个mid只会在一个分区中,而kafka的消息消费是分区有序的,这个问题就可以解决掉了

2.对于DB的并发更新使用加乐观锁(版本号)或者悲观锁的方式来达到串行更新DB记录的效果

相关推荐
梁辰兴1 小时前
软件工程:数据结构设计
数据库·软件工程·设计原则·设计方法·梁辰兴·数据库结构设计·数据库结构类型
AC赳赳老秦1 小时前
风控岗应用:OpenClaw 采集公开司法与经营异常数据,自动生成企业风险评估报告
大数据·c语言·数据库·人工智能·python·php·openclaw
灯澜忆梦2 小时前
【MySQL18】进阶篇 | MySQL管理
数据库·mysql
zcmodeltech2 小时前
智能制造教学实训沙盘模型多系统协同控制系统设计:基于STM32与Modbus RTU的工业机器人-智慧工厂-数字孪生全场景联动方案
数据库·stm32·嵌入式硬件·机器人·制造·多分类
AI多Agent协作实战派3 小时前
AI多Agent协作系统实战(四十):AI说“没有错误“,系统判了“测试失败“——一个正则的误判
数据库·人工智能
隔窗听雨眠3 小时前
OceanBase接入DeepSeek:数据库与AI的深度融合如何改写企业数据规则
数据库·人工智能·oceanbase
playboy1344 小时前
工作室 NAS 存储故障-办公室所有数据无法访问怎么办
数据库
byxdaz4 小时前
jeston平台交叉编译Poppler库与预览pdf文件
数据库
SilicoCode5 小时前
江科大STM32入门:FLASH闪存详解——从结构原理到读写保护
数据库·mongodb
一个有温度的技术博主5 小时前
DeepSeek Harness 深度解析:与 LangChain / LangGraph 的本质区别
数据库·oracle·langchain·harness