代码编织梦想

事务方法中发送异步消息,且事务方法中和消息处理逻辑都更新同一表导致数据错乱

1.背景:
mysql数据库隔离级别:读已提交(非可重复读)
业务场景:活动审核通过后,更新活动状态(更新为报名开始)、活动场次状态(更新为报名开始),然后发送延时异步消息(在活动报名开始、报名结束、活动开始、活动结束各个时间节点投递消息)。消费者那里进行活动、活动场次各个环节的状态更新。
2.造成数据异常的现象:
审核通过后,活动场次表的活动报名开始时间应该更新为审核通过时间,状态应该更新为报名中;结果活动场次表数据没更新,状态也没有更新。
3.产生原因:
事务方法内更新了活动场次表,但是事务还没有结束,没有提交。此时消息已经发送出去,消费者查询到场次表活动开始时间未更新,判断为活动场次报名未开始。之后事务方法提交,再之后消费者提交更新把事务方法的更新覆盖掉了。由于消费者更新时把更新时间参数也带进去了,导致数据库更新时间也是一个脏数据。从数据库上看,完全看不出活动场次表的更新痕迹。大坑!
4.解决方法:
事务提交之后再发送异步消息

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_27037397/article/details/129538733

多线程-爱代码爱编程

——————————NSThread———————— - (void)viewDidLoad {     [superviewDidLoad];     //不要把耗时操作,比如网络请求,线程睡眠代码,加载文件,大量运算放到主线程     //不要把修改页面的代码放在子线程,不会得到及时更新          //开辟一个子

kafka史上最详细原理总结-爱代码爱编程

Kafka Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、storm/Spark流式处理引擎,web/nginx日志、访问日志

后端面试知识点总结 redis-爱代码爱编程

数据库之Redis Redis概述 Redis(Remote Dictionary Server),即远程字典服务。是一个开源的、使用C语言编写、支持网络、可基于内存亦可持久化的日志型、key-value数据库,并提供多种语言的API。 Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-sla

MySQL高级--学习笔记(转·尚硅谷周阳主讲)-爱代码爱编程

1.MySQL安装(略) 2.MySQL逻辑架构   Connections:指的是不同语言中与SQL的交互。 Connection Pool:管理缓冲用户连接,线程处理等需要缓存的需求。MySQL数据库的连接层。 Enterprise Management Serveices & Utilities:系统管理和控制工具。备份、安

iOS最新面试题(一)-爱代码爱编程

1.聊下HTTP post的body体使用form-urlencoded和multipart/form-data的区别。 1)application/x-www-form-urlencoded: 窗体数据被编码为名称/值对,这是标准且默认的编码格式。当action为get时候,客户端把form数据转换成一个字串append到url后面,用?分割。当acti

java经典全套面试汇总(二十万字)_天天学爪娃的博客-爱代码爱编程

Java语言 1. Java基础 1.1 为什么Java代码可以实现一次编写、到处运行? 参考答案 JVM(Java虚拟机)是Java跨平台的关键。 在程序运行前,Java源代码(.java)需要经过编译器编译成字

浅谈消息队列-爱代码爱编程

浅谈消息队列 一、为何使用消息队列、优缺点及常用消息队列对比 这里抛出三个问题 为什么使用消息队列?消息队列有什么优点和缺点?Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么区别,以

八股文复习_复习八股文-爱代码爱编程

二分查找复习 public class BinarySearch { public static void main(String[] args) { //二分查找适用于有序查询,无序需要先排序

python3 mysql 数据库连接 【python学习连续,请关注】_python接收数据库查询出的结果集-爱代码爱编程

本文我们为大家介绍 Python3 使用 PyMySQL 连接数据库,并实现简单的增删改查。 什么是 PyMySQL? PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2 中则使用mysqldb。 PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Py