###事件背景:
###dubbo+zookeeper架构下的微服务项目,用户最近一次产生的设备(血压计、血糖仪、手环心率)数据
保存于data服务中的data库data_latest_summary表中,后为了适应健管角色(基础服务)分页获取同样的数据,
需要将data服务的data_latest_summary表中数据通过查询后,复制到基础服务的同样的data_latest_summary表中。
步骤:首先使用MQ消息队列,监听数据上传(只要data服务有对应的数据上传(此处,data服务对上传的数据进行
了一系列的处理,为了保持各表数据的一致性,方法上使用了注解@Transactional事务),则发送数据上传的消息,
基础服务监听消费该消息,消费的过程通过查询data库data_latest_summary后,将同样的数据,存入基础服务
data_latest_summary中,此时出现了一个问题:经常会出现基础服务在消费查data服务的data_latest_summary表时,
查询到的数据并不是此次存储的最新数据,而是上一次的历史数据,数据出现了偏差,经过排查发现,这是由于,
方法在发送MQ异步消息(发送MQ在方法的最后一步)后才提交数据库事务,有时候数据库事务提交的时间长于MQ执行
的时间,从而导致上述问题,由于项目急着上线,目前的处理方法是MQ延时10s发送消息,虽解决问题,但不够优雅,
后续抽时间优雅的优化该问题,谨以此记。)
消息队列与数据库事务的冲突
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 将发短信封装为一条消息,放置到消息队列中。携程买票,提交订单。也可以使用消息队列。 消息队列特性 kafka 应用...
- 说到分布式事务,就会谈到那个经典的”账号转账”问题:2个账号,分布处于2个不同的DB,或者说2个不同的子系统里面,...
- 什么是事务? 事务就是把多件事情当做一件事情来处理。是数据库操作的最小单元,是作为单个逻辑工作单元执行的一系列操作...
- Spring_数据库事务、事务并发、数据库锁_01 01 何为数据库事务 ACID 原子性(Atomic)表示组成...
- 原文地址:https://yq.aliyun.com/articles/596022摘要: 在金融级分布式架构的领...