事务消费

我们经常支付宝转账余额宝,这是日常生活的一件普通小事,但是我们思考支付宝扣除转账的钱之后,如果系统挂掉怎么办,这时余额宝账户并没有增加相应的金额,数据就会出现不一致状况了。

上述场景在各个类型的系统中都能找到相似影子,比如在电商系统中,当有用户下单后,除了在订单表插入一条记录外,对应商品表的这个商品数量必须减1吧,怎么保证?!在搜索广告系统中,当用户点击某广告后,除了在点击事件表中增加一条记录外,还得去商家账户表中找到这个商家并扣除广告费吧,怎么保证?!等等,相信大家或多或多少都能碰到相似情景。

本质上问题可以抽象为:当一个表数据更新后,怎么保证另一个表的数据也必须要更新成功

人说这个很简单嘛,可以用事务解决

Begin transaction update A set amount=amount-10000 where userId=1;update B set amount=amount+10000 where userId=1;
End transaction
commit;

这样确实能解决,如果你使用spring的话一个注解就能搞定上述事务功能

@Transactional(rollbackFor=Exception.class) public void update() { updateATable(); //更新A表 updateBTable(); //更新B表 }

如果系统规模较小,数据表都在一个数据库实例上,上述本地事务方式可以很好地运行&

rocketMq发送事务消息相关推荐

  1. RocketMQ(九):rocketMQ设计的全链路消息零丢失方案?+rocketmq消息中间件事务消息机制的底层实现原理?+half是什么?+half消息是如何对消费者不可见的?

    前言: 目前rocketmq更新已经更新了11篇博客了,预计接下来的2-3篇是暂时的更新进度了,准备更新一下springboot或者是jvm,mysql相关的专题出来,后续更新完事后,再分享一些实战性 ...

  2. RocketMQ之事务消息

    本文来说下Rocket的消息事务 文章目录 概述 事务消息实现原理 本文小结 概述 在电商系统上线初期,往往会进行一些"拉新"活动,例如活动部门提出新用户注册送积分.送优惠券活动. ...

  3. rocketmq发送顺序消息(四)

    rocketmq怎么发送消息可参考我的上一篇博客:rocketmq发送第一条消息.此处我们讲解如何发送rocketmq顺序消息 producer public class ProducerOrder ...

  4. RocketMq发送延迟消息

    什么是延迟消息? 对于消息中间件来说,producer将消息发送到mq的服务器,但并不期望这条消息马上被消费,而是推迟到当前时间点之后的某个时间点后再投递到queue中让consumer进行消费,延迟 ...

  5. RocketMQ 分布式事务消息过程分析

    生产环境最小单元高可用部署模式: 如果192.168.3.100的broker假死,那么3.110,3.111的nameserver都能在2分钟内感知broker-a宕机,然后客户端能成功从names ...

  6. RocketMQ发送延迟消息时报错,发送同步消息却正常

    延时消息代码如下: Message<Mdds> message = MessageBuilder.withPayload(mdds).build(); // 延迟第3级发送(延迟10秒) ...

  7. RocketMQ5.0.0事务消息

    目录 一.事务消息概览 二.事务消息实现机制 1. 事务消息发送流程 1):发送事务消息类图 2):生产端发送事务消息 3):Broker存储事务消息 2. 生产者提交或回滚事务消息 1):生产者发送 ...

  8. 事务消息大揭秘!RocketMQ、Kafka、Pulsar全方位对比

    导语 | 事务是一个程序执行单元,里面的所有操作要么全部执行成功,要么全部执行失败.RocketMQ.Kafka和Pulsar都是当今业界应用十分广泛的开源消息队列(MQ)组件,笔者在工作中遇到关于M ...

  9. 实战分析 RocketMQ事务消息

    众所周知,在分布式领域有两大经典理论:CAP 和 BASE.一般情况下,我们将CAP中的数据一致性称为"强一致性",将BASE中的数据一致性称为"最终一致性". ...

最新文章

  1. elementui 清空下拉框值_element中的select如何在下拉数据改变后清空之前的选择?...
  2. 客户端相关知识学习(三)之Android原生与H5交互的实现
  3. C++ Opengl纹理贴图源码
  4. 鸿合怎么删掉linux6_鸿合电子白板怎么校准?鸿合电子白板校准的方法
  5. python编程教程if_Python编程:从入门到实践——【作业】——第五章(if语句)...
  6. 为什么REST如此重要
  7. b tree和b+tree_B TREE实施
  8. php实现一个简单的四则运算计算器
  9. linux的idle命令,DBA 常用Linux命令
  10. 初识:如何实现利用C语言代码封装成可以安装的windows软件?
  11. SAP License:SAP RKE_HZSTMP标准时间转EXCEL日期方法
  12. 理解Marx-4 马克思的第一次思想转变
  13. 迅雷 android通用版本下载地址,迅雷5下载|迅雷5安卓旧版本-520下载站
  14. 【python爬虫】《中华诗词大会》诗词接龙代码实现
  15. 广告中cpm,ecpm,rpm指标含义
  16. 吐血整理C++书单,萌新到大牛,要看哪些书?
  17. mysql创建软连接_18.4.2 建立MySQL的软链接
  18. android实战开发记账本App,android开发实战-记账本APP(一)
  19. MySQL Notifier
  20. 阿里云道哥:我曾经是饱受网络攻击摧残的创业者,现在我要帮他们顶住

热门文章

  1. setjmp.h(c标准库)
  2. syslog-ng记录history日志
  3. 【开源】QuickPager ASP.NET2.0分页控件V2.0.0.1——支持多种数据库。让分页更加简单。...
  4. P1119 灾后重建(floyd进阶)
  5. SpringMVC拦截器工作流程图
  6. ios category 笔记整理(一)
  7. 设计模式六大原则——迪米特法则(LoD)
  8. Nginx实战基础篇一 源码包编译安装部署web服务器
  9. APUE读书笔记-15进程内部通信-05FIFOs
  10. 给大家展示一下最近在Yeslab安全实验室测试的设备!